当前位置:w88手机版登录-www.w88zhan.com-优德w88app官方登录 > w88手机版登录网络 > 如果一个函数被作为一个对象的方法调用

如果一个函数被作为一个对象的方法调用

文章作者:w88手机版登录网络 上传时间:2019-12-21

javaScript中的this示例学习详整及职业规律

 那篇小说首要介绍了javaScript中的this示例学习安详严整及办事原理,我们参考使用呢

this的做事原理

 

风姿洒脱经八个函数被作为多个指标的法子调用,那么this将被派出为那么些目的。

 

代码如下:

var parent = {

    method: function () {

        console.log(this);

    }

};

 

parent.method();

// <- parent

 

 

 

在乎这种行为丰富“虚亏”,假让你获得多个办法的援用何况调用,那么this的值不会是parent了,而是window全局对象。那让好些个开垦者吸引。

 

代码如下:

ThisClownCar();

// <- Window

 

改动this

 

.call、 .apply 和.bind 方法用来操作调用函数的章程,帮我们定义this的值和传递给函数的参数值。

 

Function.prototype.call 能够有专断数量的参数,第二个参数被分配给this,剩下的被传送给调用函数。

代码如下:

Array.prototype.slice.call([1, 2, 3], 1, 2)

// <- [2]

 

Function.prototype.apply 的作为和.call肖似,但它传递给函数的参数是二个数组,实际不是不管三七七十风华正茂参数。

 

String.prototype.split.apply('13.12.02', ['.'])

// <- ['13', '12', '02']

 

 

Function.prototype.bind 创制一个分化平常的函数,该函数将生生世世使用传递给.bind的参数作为this的值,以致能够分配部分参数,成立原函数的珂里化(curride)版本。

 

代码如下:

var arr = [1, 2];

var add = Array.prototype.push.bind(arr, 3);

 

// effectively the same as arr.push(3)

add();

 

// effectively the same as arr.push(3, 4)

add(4);

 

console.log(arr);

// <- [1, 2, 3, 3, 4]

 

 

效果与利益域链中的this

 

在底下的例证,this将不可能在功用域链中保障不改变。那是平整的久治不愈的疾病,而且有时会给业余开拓者带来纠缠。

 代码如下:

function scoping () {

  console.log(this);

 

  return function () {

    console.log(this);

  };

}

 

scoping()();

// <- Window

// <- Window

 

 

有三个遍布的情势,创立二个部分变量保持对this的援用,并且在子成效域中不可能有同命变量。子成效域中的同名变量将掩瞒父作用域中对this的援引。

 

 

 代码如下:

function retaining () {

  var self = this;

 

  return function () {

    console.log(self);

  };

}

 

retaining()();

// <- Window

 

 

除非你确实想同期利用父效用域的this,以致当前this值,由于一些莫名其妙的来头,作者更赏识是选择的方法.bind函数。那足以用来将父功效域的this钦点给子功效域。

 

 代码如下:

function bound () {

  return function () {

    console.log(this);

  }.bind(this);

}

 

bound()();

// <- Window

 

那篇小说重要介绍了javaScript中的this示例学习详明及职业规律,大家参谋运用吧 this的干活原理 如...

本文由w88手机版登录-www.w88zhan.com-优德w88app官方登录发布于w88手机版登录网络,转载请注明出处:如果一个函数被作为一个对象的方法调用

关键词: 优德w88.com