根据另一个对象的属性定义对象的属性

时间:2014-03-01 07:27:31

标签: javascript function object

我根据对象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

1 个答案:

答案 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

无论你传递的是callapply中的第一个参数,你的函数都会返回那个对象。因此,当您看到您的函数执行了它应该执行的操作时,但如果您希望它始终返回您的第一个对象someObject,则不需要使用this关键字。

my answer读到 How does JavaScript .prototype work? ,我试图在前两部分深入探讨这个概念。

这也是关于这个概念的最佳资源之一:

Understanding JavaScript Function Invocation and “this”