国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

盤點JavaScript中Function三大用途

開發 前端
JavaScript中的Function對象是函數,函數的用途分為3類,它們分別是作為普通邏輯代碼容器;作為對象方法和作為構造函數。

JavaScript中的Function對象是函數,本文向大家簡單介紹一下Script中的Function(函數)對象的三大用途,相信本文介紹一定會讓你有所收獲。

JavaScript中的Function(函數)對象

JavaScript中的Function對象是函數,函數的用途分為3類:

作為普通邏輯代碼容器;

作為對象方法;

作為構造函數。

1.作為普通邏輯代碼容器

  1. functionmultiply(x,y){  
  2. returnx*y;  

函數multiply封裝了兩位數的乘法運算公式:

  1. varproduct=multiply(128,128);//product=16384 
  2.  

創建函數實例的方式有3種。第一種是聲明式,即像聲明變量一樣,將通過function(){}標識符創建的匿名函數直接賦值給變量,以該變量作為調用時的函數名稱:

  1. varmultiply=function(x,y){  
  2. returnx*y;  

第二種是定義式,即以function關鍵字后跟函數名稱及(){}來直接定義命名函數,前面第一個multiply函數就是通過定義式創建的。

第三種是構造函數式,即通過new運算符調用構造函數Function來創建函數。這種方式極不常用,因此就不作介紹了。

在創建函數的3種方式中,聲明式和定義式還存在細微的差別。比如下列代碼中的函數采用聲明式:

  1. varexample=function(){  
  2. return1;  
  3. }  
  4. example();  
  5. varexample=function(){  
  6. return2;  
  7. }  
  8. example();  
  9.  

 執行結果如下:

  1. 1  

而如果采用定義式,即:

  1. functionexample(){  
  2. return1;  
  3. }  
  4. example();  
  5. functionexample(){  
  6. return2;  
  7. }  
  8. example(); 

那么會得到另一種結果:

  1. 2  

即,在采用定義式創建同名函數時,后創建的函數會覆蓋先創建的函數。這種差別是由于JavaScript解釋引擎的工作機制所導致的。JavaScript解釋引擎在執行任何函數調用之前,首先會在全局作用域中注冊以定義式創建的函數,然后再依次執行函數調用。由于注冊函數時,后定義的函數重寫了先定義的函數,因此無論調用語句位于何處,執行的都是后定義的函數。相反,對于聲明式創建的函數,JavaScript解釋引擎會像對待任何聲明的變量一樣,等到執行調用該變量的代碼時才會對變量求值。由于JavaScript代碼是從上到下順序執行的,因此當執行第一個example()調用時,example函數的代碼就是首先定義代碼;而當執行第二個example()調用時,example函數的代碼又變成了后來定義的代碼。#p#

2.作為對象方法

JavaScript在解析代碼時,會為聲明或定義的函數指定調用對象。所謂調用對象,就是函數的執行環境。如果函數體內有以關鍵字this聲明的變量,則this引用的就是調用對象。

事實上,在普通的函數中,也存在調用對象,只不過這個調用對象是默認的全局window對象而已。例如:

varproduct=window.multiply(128,128);//product=16384

這說明,默認情況下,在全局作用域中定義或聲明的函數的調用對象就是window。

在面向對象編程中,通常將作為對象成員的函數稱為方法。例如:

  1. vardog={};  
  2. dog.name=“heibao”;  
  3. dog.age=“3months”;  
  4. dog.shout=function(){  
  5. return“Hello,Mynameis“+this.name+”andIam”+this.age+”old!”;  
  6. }  
  7. dog.shout();//“Hello,MynameisheibaoandIam3monthsold!”  
  8.  

 有意思的是,對象也可以借用其他對象的方法:

  1. varcat={};  
  2. cat.name=“xiaohua”;  
  3. cat.age=“2years”;  
  4. cat.greet=dog.shout;  
  5. cat.greet();//“Hello,MynameisxiaohuaandIam2yearsold!” 

另外,使用函數對象的call和apply方法,還可以動態指定函數或方法的調用對象:

  1. dog.shout.call(cat);  
  2. //“Hello,MynameisxiaohuaandIam2yearsold!”  
  3.  
  4. 或者  
  5.  
  6. dog.shout.apply(cat);  
  7. //“Hello,MynameisxiaohuaandIam2yearsold!”  

#p#3.作為構造函數

JavaScript是通過構造函數來模擬面向對象語言中的類的。例如:

  1. functionAnimal(sort,character){  
  2. this.sort=sort;  
  3. this.character=character;  

以Animal作為構造函數,就可以像下面這樣創建一個新對象:

  1. vardog=newAnimal(”mammal”,”fourlegs”);  
  2.  

創建dog的對象的過程如下:首先,new運算符創建一個空對象({}),然后以這個空對象為調用對象調用函數Animal,為這個空對象添加兩個屬性sort和character,接著,再將這個空對象的默認constructor屬性修改為構造函數的名稱(即Animal;空對象創建時默認的constructor屬性值是Object),并且將空對象的__proto__屬性設置為指向Animal.prototype——這就是所謂的對象初始化。最后,返回初始化完畢的對象。這里將返回的新對象賦值給了變量dog。

  1. dog.sort;//mammal  
  2. dog.character;//fourlegs  
  3. dog.constructor;//Animal 

聰明的讀者結合前面介紹的內容,可能會認為使用new運算符調用構造函數創建對象的過程也可以像下面這樣來實現:

  1. vardog={};  
  2. Animal.call(dog,“mammal”,”fourlegs”); 

表面上看,這兩行代碼與vardog=newAnimal(”mammal”,”fourlegs”);是等價的,其實卻不是。雖然通過指定函數的執行環境能夠部分達到初始化對象的目的,例如空對象dog確實獲得了sort和character這兩個屬性:

  1. dog.sort;//mammal  
  2. dog.character;//fourlegs  
  3. dog.constructor;//Object——注意,沒有修改dog對象默認的constructor屬性 

但是,最關鍵的是新創建的dog對象失去了通過Animal.prototype屬性繼承其他對象的能力。只要與前面采用new運算符調用構造函數創建對象的過程對比一下,就會發現,new運算符在初始化新對象期間,除了為新對象添加顯式聲明的屬性外,還會對新對象進行了一番“暗箱操作”——即將新對象的constructor屬性重寫為Animal,將新對象的__proto__屬性設置為指向Animal.prototype。雖然手工“初始化對象”也可以將dog.constructor重寫為Animal,但根據ECMA262規范,對象的__proto__屬性對開發人員是只讀的,對它的設置只能在通過new運算符創建對象時由JavaScript解釋引擎替我們完成。
JavaScript是基于原型繼承的,如果不能正確設置對象的__proto__屬性,那么就意味著默認的繼承機制會失效:

  1. Animal.prototype.greet=“Hi,goodlucky!”;  
  2. dog.greet;//undefined 

事實上,在Firefox中,__proto__屬性也是可寫的:

  1. Animal.prototype.greet=“Hi,goodlucky!”;  
  2. dog.__proto__=Animal.prototype;  
  3. dog.greet;//Hi,goodlucky! 

但這樣做只能在Firefox中行得通。考慮到在兼容多瀏覽器,必須依賴于new運算符,才能實現基于原型的繼承。

【編輯推薦】

  1. 深入學習JavaScript中Function對象語法
  2. 解析JS中定義Function的兩種實用方法
  3. prototype.js的Ajax對IE8兼容問題解決方案
  4. Javascript數組創建及其常見操作
  5. JavaScript調試工具解決IE6等多版本共存問題 

 

責任編輯:佚名 來源: okajax.com
相關推薦

2019-02-21 05:51:44

物聯網用途IOT

2022-07-01 10:34:03

JavaScript代碼前端

2019-12-04 08:18:03

5G通信KPI

2019-10-25 21:39:39

服務器開發工具

2013-07-15 10:46:36

2023-07-12 23:41:04

Linuxfind

2010-05-24 14:57:10

SVN子命令

2011-04-12 10:56:35

平板電腦iPadAdMob

2018-09-18 23:25:49

Python數據科學

2023-11-28 11:29:02

人工智能醫療保健

2015-09-14 15:23:44

JavaScriptfunction

2019-12-03 19:09:19

JavaScriptNumbers阿里云計算

2021-07-20 10:26:12

JavaScriptasyncawait

2009-02-12 10:17:00

系統網絡故障

2012-11-07 15:13:05

2012-02-06 13:52:33

JavaScript

2025-03-19 10:22:09

JavaScript編程語言開發

2021-11-11 11:24:54

JavaScript模型事件

2010-11-03 09:31:33

YouTubeFacebookXBox Live E

2022-05-29 21:39:32

工業物聯網信息技術
點贊
收藏

51CTO技術棧公眾號

国产一区二区高清| 日韩和的一区二在线| 久久狠狠婷婷| 亚洲一区亚洲二区| 亚洲网一区二区三区| 亚洲国内精品视频| sm国产在线调教视频| 亚洲电影一级黄| caoporn超碰国产公开| a在线欧美一区| 国产一级做a爰片久久毛片男| 日韩有码一区二区三区| 久久99精品久久久久久三级| 99成人在线视频| 国产精品嫩草视频| 精品久久一区| 国产精品欧美风情| 波多野结衣在线播放一区| 欧美一区二三区| 杨幂一区二区三区免费看视频| 不卡av电影院| 白白在线精品| 91tv亚洲精品香蕉国产一区7ujn| 丁香婷婷成人| 5566日本婷婷色中文字幕97| 精品视频在线你懂得| 97国产一区二区精品久久呦 | 久久免费精品日本久久中文字幕| а天堂中文最新一区二区三区| 中文字幕亚洲在线| 欧美a级大片在线| 日本精品久久中文字幕佐佐木| 国产精品嫩模av在线| 国产精品一久久香蕉国产线看观看| 日韩国产综合| 国产精品乱子乱xxxx| 日韩精品电影一区亚洲| 欧美日韩dvd| 久久久久88色偷偷免费| 制服丝袜影音先锋| 色偷偷久久人人79超碰人人澡| 国产三级在线观看| 亚洲第一av网| 精品一区二区三区在线观看视频| 国模视频一区二区三区| 日本道不卡免费一区| 国产一区高清视频| 国产精品夜夜嗨| 蜜桃免费在线视频| 亚洲午夜精品久久久久久久久| 国产小视频在线观看| 欧美疯狂性受xxxxx喷水图片| 乱馆动漫1~6集在线观看| 国产一区二区三区在线视频 | 日韩电视剧免费观看网站| 78精品国产综合久久香蕉| 欧美黄色性视频| 91精品婷婷色在线观看| 亚洲黄色一区二区三区| 久久众筹精品私拍模特| 性网站在线播放| 亚洲精品久久久久久下一站 | 亚洲高清影视| 法国空姐在线观看免费| 国产精品国产三级国产a | 欧美性猛交xxxxx免费看| 国产在线观看www| 国产不卡一区二区在线播放| 国产日韩欧美| 国产一级做a爰片久久| 欧美三级电影网站| 国产精品视频首页| 国产精品9999久久久久仙踪林| 国产成人免费在线视频| 超碰在线中文| 亚洲男人的天堂在线| 国产一区二区在线| 国产 欧美 日韩 一区| 婷婷激情综合网| 国产精品igao视频网网址不卡日韩| 999国产在线| 99re这里只有精品6| 免费黄色网页在线观看| 欧美激情亚洲另类| 久久99精品久久久久久动态图 | 中文字幕av不卡| 怡红院av在线| 国产精品99久久久久久人 | 国内视频一区| 亚洲国产高清不卡| h片精品在线观看| 国产欧美在线看| 久久久综合精品| 日本一级理论片在线大全| 久久久久久av| 国产毛片精品视频| 日韩毛片久久久| 国产精品18久久久久久麻辣| av在线这里只有精品| 中文在线字幕免费观看| 国产美女久久精品| 日本一区二区在线不卡| 欧洲一级精品| 亚洲在线播放电影| 在线综合亚洲欧美在线视频| 国产欧美日韩免费观看| www.爱色av.com| 亚洲精品一区二区在线| 亚洲无吗在线| 日韩写真在线| 日韩美女视频免费看| 99久久免费精品高清特色大片| 日韩成人伦理| 欧美日韩在线观看一区二区三区 | 日韩欧美成人激情| 91精品国产乱码久久久久久| 成人av小说网| 欧美高清自拍一区| 久久久天堂av| 懂色av色香蕉一区二区蜜桃| 亚洲国产精品影视| 亚洲福利视频免费观看| 视频一区二区三区入口| 一本一道波多野毛片中文在线 | 欧洲精品视频在线观看| 窝窝社区一区二区| 日韩av手机版| 欧美大学生性色视频| 91视频精品在这里| 日韩av黄色| 黄色一级一级片| 久久大大胆人体| 国产欧美精品一区二区三区四区| 国产精品一区二区三区av| 成年人午夜视频在线观看| 国产亚洲激情在线| 99国产精品久久久| 中文字幕视频精品一区二区三区| 欧美性猛交xxx乱久交| 91产国在线观看动作片喷水| 国产精品久久国产精麻豆99网站| 国产精品天天看天天狠| aaa一级毛片| 亚洲精品免费av| 欧美日韩亚洲综合一区| 亚洲女同在线| 精品三级久久| 免费在线观看的av网站| 久久久这里只有精品视频| 亚洲欧美韩国综合色| 91成人看片| 1769免费视频在线观看| 最新精品视频| 欧美激情18p| 日韩欧美在线视频观看| 午夜在线a亚洲v天堂网2018| 性感女国产在线| 人人干人人视频| 91精品免费久久久久久久久| 91 com成人网| 成人国产亚洲欧美成人综合网| 97青娱国产盛宴精品视频| 最新在线你懂的| 日韩av不卡播放| 久久精品91久久香蕉加勒比| 亚洲欧美日韩国产中文在线| 91精品国产乱码久久久久久久| 蜜桃视频网站在线| av片在线免费| 国产成人小视频在线观看| 在线观看欧美黄色| 精品一区二区三区在线观看国产 | 欧美丰满日韩| 污污网站在线观看| 国产又粗又长又大的视频| 91亚洲精华国产精华| 精品国产人成亚洲区| 久久久久一区二区三区四区| 俺要去色综合狠狠| tube8在线hd| 1024欧美极品| 日韩中文字幕av在线| 久久亚洲精品成人| 欧美日韩国产丝袜美女| 极品美女销魂一区二区三区免费 | 探花国产精品| 色阁综合av| 庆余年2免费日韩剧观看大牛| 欧美色网一区二区| 91老司机福利 在线| 欧美日韩一区自拍| 日韩精品第一| 国产日韩精品在线看| 国产成人精品免费看在线播放| 91av在线播放| 亚洲视频欧洲视频| 欧美高清视频不卡网| 国产精品久久久久影院亚瑟 | 亚洲综合丝袜美腿| 精品一区二区三区欧美|