我在下面有这个示例代码。我可能偏离基础,但我总是在javascript中理解this
来表示作为调用对象的函数/对象的所有者。
function hello() {
var hello = [this.name, this.sayHello].join('');
console.log(hello);
}
var obj = {
name: 'Chris',
sayHello: ', how are you today?'
};
hello.call(obj);
我的下一个想法是正在发生的事情是obj现在正在接收其原型的hello()函数。所以我然后在.call
函数之后运行它。
obj.hello();
令我惊讶的是我收到了一个类型错误:你好不是一个函数。任何人都可以对这个.call()
javascript函数的后端发生的事情有所了解吗?
修改
让我编辑清楚。
我问的问题是“'这个'的范围是如何变化的?函数hello()
在范围内不应该有this.name
。除非将函数hello添加到obj
的原型中但它显然有效。所以在.call()的Javascript函数端发生了什么诡计让它发挥作用。
答案 0 :(得分:2)
Function#call
执行this
绑定到thisArg
的函数。
您可以实现类似的功能:
Function.prototype.myCall = function(thisArg) {
thisArg.myBoundCall = this;
thisArg.myBoundCall();
delete thisArg.myBoundCall;
}
function hello() {
var hello = [this.name, this.sayHello].join('');
console.log(hello);
}
var obj = {
name: 'Chris',
sayHello: ', how are you today?'
};
hello.myCall(obj);
答案 1 :(得分:1)
通过执行hello.call(obj);
,它不会在名为hello的obj对象上创建一个新方法,以便稍后使用。
答案 2 :(得分:0)
null
是this
中指定的对象。您可以通过其他方式将hello.call
定义为hello
的方法。
this