我根据对象anotherObject
中的anotherFunction
定义了一个名为someFunction
的对象,其中包含一个名为someObject
的函数。
var someObject={
someFunction:function(){
return this;
}
};
console.log(someObject.someFunction()===someObject);//true
var someFunc=someObject.someFunction;
console.log(someFunc===someObject.someFunction);//true
//the function does not have the same context as that of the function called earlier...
console.log(someFunc()===someObject);//false
var anotherObject={
anotherFunction:someObject.someFunction
};
console.log(anotherObject.anotherFunction===someObject.someFunction);//true
console.log(anotherObject[anotherFunction]()===anotherObject);//true;
console.log(anotherObject.anotherFunction()===someObject);//false
Firefox Scratchpad报告未定义函数anotherFunction
。
答案 0 :(得分:0)
这就是JavaScript函数实际工作的方式,someFunction
是一个函数,它的职责是在当前上下文中返回this
,无论这个是什么:
var someFunc=someObject.someFunction;
您可以使用电话或使用您喜欢的任何上下文来调用它:
var myobj = {};
console.log(someFunc.call(myobj)===myobj);//true
console.log(someFunc.apply(myobj)===myobj);//true
无论你传递的是call
和apply
中的第一个参数,你的函数都会返回那个对象。因此,当您看到您的函数执行了它应该执行的操作时,但如果您希望它始终返回您的第一个对象someObject
,则不需要使用this
关键字。
将my answer读到 How does JavaScript .prototype work?
,我试图在前两部分深入探讨这个概念。
这也是关于这个概念的最佳资源之一: