本文在于理解JavaScript this 关键字,转载自https://blog.csdn.net/ancc4/article/details/38461121
零:从基本的例子开始
var value = 1; var myObject = { value: 0, get: function(){ console.log(this.value); } }; myObject.get();
将上面的代码保存为test.js ,执行node test.js,输出 0。可以看出this指向的是myObject而不是全局,否则应该输出1,这一点看起来很自然。
但是下面这个例子看起来就不自然了
myObject = {"name" : "me"}; name = 'all'; myObject.double = function(){ var get = function(){ console.log(this.name); }; get(); }; myObject.double();
输出的结果是all而不是me
这是因为:
当一个函数被保存为对象的一个属性的时候,我们称之为一个方法。当一个方法被调用的时候,this被绑定到这个对象;
当一个函数并非一个对象的属性时,它是被当作一个函数来调用。
壹:var self = this
对于上面提到的这种特性,可以用一种方法来解决:在方法定义一个变量并给它赋值为this,那么内部函数就可以通过那个变量访问this。
myObject = {"name" : "me"}; name = 'all'; myObject.double = function(){ var self = this; var get = function(){ console.log(self.name); }; get(); }; myObject.double();
这样就能输出me了
贰:bind(this)
还可以用另外一种方法来解决
myObject = {"name" : "me"}; name = 'all'; myObject.double = function(){ var get = function(){ console.log(this.name); }.bind(this); get(); }; myObject.double();
这样也能输出me了
其他:
ES6 模块之中,顶层的this
指向undefined
,即不应该在顶层代码使用this
。