97国产精品视频人人做人人爱,3344在线观看无码,成年人国产视频,欧美日一级片,在线看AV天堂,高清无码一本到东京热,欧美一级黄片一区2区,免费又爽又刺激高潮网址

更改this指向的方法及其區別

2019-8-21    seo達人

今天給朋友們帶來更改this指向的三種方法,以及它們的區別:



一:call用法

window.color = 'red';

document.color = 'yellow';

var s1 = {color: 'blue'};

function changeColor () {

console.log(this.color);

}

changeColor.call() //不傳參數默認指向window

changeColor.call(window) //指向window

changeColor.call(document) //指向document

changeColor.call(this) //構造函數的this如果打括號調用默認指向window

changeColor.call(s1) //指向s1對象



//例二:

var Pet = {

words: '...',

speak: function (say) {

console.log(say + '' + this.words)

}

}

Pet.speak('123') //輸出123...

var Dog = {

words: 'WangWangWang'

}

Pet.speak.call(Dog,'123') //輸出123WangWangWang



二:apply用法:

window.number = 'one';

document.number = 'two';

var s1 = {number: 'three'};



function changeNum() {

console.log(this.number)

}

changeNum.apply(); //one

changeNum.apply(window); //one

changeNum.apply(document);//two

changeNum.apply(this);//one

changeNum.apply(s1);//three



//例二:

function Pet(words){

this.words = words;

this.speak = function(){

console.log(this.words)

}

}

function Dog(words){

Pet.call(this,words);//結果wang

// Pet.apply(this,arguments);//結果wang

}

var dog = new Dog('wang');

dog.speak(); //wang



apply與call的區別:

接收的參數不同

apply()方法接收倆個參數,一個是函數運行的作用域(this),另一個是參數數組。

call()方法第一個參數和apply()方法的一樣,但是傳遞給函數的參數必須一 一列舉出來。

語法:

apply([thisObj [,argArray]]);

調用一個對象的一個方法,另一個對象替換當前對象

call([thisObj [,arg1[,arg2[…,argn]]]]);

說明:

如果thisObj是null或者undefined的時候,默認指向window。

如果argArray不是一個有效數組或不是arguments對象,那么將導致一個TypeError,如果沒有提供argArray和thisObj任何一個參數,那么Global對象將用作thisObj。

call方法可以用來代替另一個對象的一個方法,call方法可以將一個函數的對象上下文從初始的上下文改變為thisObj指定的新對象,如果沒有提供thisObj參數,那么Global對象被用于thisObj。



三:bind的用法:

var obj = {

name: 'WuXiaoDi'

}

function printName() {

console.log(this.name)

}

var wuXiaoDi = printName.bind(obj)

console.log(wuXiaoDi) //function(){...}

wuXiaoDi() //WuXiaoDi



//例二:

function fn(a, b, c) {

console.log(a, b, c);

}

var fn1 = fn.bind(null, 'Dot');

fn('A', 'B', 'C'); //A B C

fn1('A', 'B', 'C');           // Dot A B

fn1('B', 'C');                // Dot B C

fn.call(null, 'Dot');      // Dot undefined undefined



//例三:實現函數珂里化

var add = function(x) {

return function(y) {

return x + y;

};

};

var increment = add(1);

var addTen = add(10);

increment(2) //3

addTen(2) //12



小總結:

Function.prototype.bind(thisArg) - - ES5



能夠返回一個新函數,該新函數的主體與原函數主體一致,但當新函數被調用執行時,函數體中的this指向的是thisArg所表示的對象。



Function.prototype.call(this.Arg,val1,val2, …)



調用函數執行,在函數執行時將函數體中的this指向修改為thisArg所表示的對象



val1, val2, … 表示傳遞給調用函數的實際參數列表



Function.prototype.apply(thisArg, array|arguments)



調用函數執行,在函數執行時將函數體中的this指向修改為thisArg所表示的對象,



array|arguments 表示調用函數的參數列表,使用數組或類數組的格式



區別:

bind與call和apply的區別:

返回值的區別:

bind的返回值是一個函數,而call和apply是立即調用。

參數使用的區別:

bind與call一樣是從第二個參數開始將想要傳遞的參數一 一寫入。但call是把第二個及以后的參數作為fn方法的實參傳進去,而fn1方法的實參實則是在bind中參數的基礎上再往后排。

藍藍設計www.0391cbd.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計  cs界面設計  ipad界面設計  包裝設計  圖標定制  用戶體驗 、交互設計、 網站建設 平面設計服務

日歷

鏈接

個人資料

藍藍設計的小編 http://www.0391cbd.com

存檔

主站蜘蛛池模板: 国产又色又刺激高潮免费看 | 毛片卡一卡二| 19国产精品麻豆免费观看| 欧美国产综合色视频| 日本道中文字幕久久一区| 999国内精品久久免费视频| 欧美一区精品| 国产网站免费看| 久久久国产精品免费视频| 亚洲另类色| 欧美日韩精品一区二区视频| 国产成人综合亚洲欧美在| 亚洲综合精品香蕉久久网| 99这里只有精品在线| 亚洲男人的天堂在线| 午夜人性色福利无码视频在线观看| 欧美日韩在线成人| 亚洲h视频在线| 色天天综合久久久久综合片| 色哟哟精品无码网站在线播放视频| 国产Av无码精品色午夜| 尤物午夜福利视频| 国产精品久久久久久久久| 国产区91| 91久久夜色精品国产网站| 久久人与动人物A级毛片| 国产区在线观看视频| 国产尤物在线播放| 色婷婷成人| 一本色道久久88| 亚洲 欧美 日韩综合一区| 91视频青青草| 亚洲电影天堂在线国语对白| 亚洲91在线精品| 久久香蕉国产线看观| 国产香蕉在线视频| 精品欧美日韩国产日漫一区不卡| 国产黄网站在线观看| 亚洲精品无码AⅤ片青青在线观看| 国产免费一级精品视频| 在线国产资源| 国产毛片高清一级国语| 欧美一级高清片欧美国产欧美| 日本欧美午夜| 日本手机在线视频| 全午夜免费一级毛片| 国产女人在线| 色香蕉影院| 久久国产精品嫖妓| 国产在线日本| 亚洲综合第一区| 九月婷婷亚洲综合在线| 亚洲床戏一区| 91极品美女高潮叫床在线观看| 国产精品无码作爱| 国产午夜无码专区喷水| 久久精品波多野结衣| 日韩黄色在线| 超级碰免费视频91| 57pao国产成视频免费播放| 污网站免费在线观看| 美女免费黄网站| 亚洲欧州色色免费AV| 97se亚洲综合| 亚洲婷婷六月| 国产成人成人一区二区| jizz在线观看| 国产精品第页| 色婷婷色丁香| 亚亚洲乱码一二三四区| 国产一级妓女av网站| 一级毛片免费的| 日韩a级毛片| 亚洲av无码成人专区| 国产精品黄色片| 综1合AV在线播放| 99re在线视频观看| 丝袜美女被出水视频一区| 2022精品国偷自产免费观看| 欧美日韩北条麻妃一区二区| 456亚洲人成高清在线| 亚洲成网777777国产精品|