你首先需要了解如何取决于函数是如何调用的this
变化值。
首先,我们有成员函数。 Object.prototype.toString
是Object.prototype
的成员函数。你可以想象这只是为:
Object.prototype = {
toString: function() {} // is responsible for converting an object to it's string representation
};
当调用成员函数的this
上下文是指父对象(的Object
实例)。由于内置JS对象扩展Object
,他们都能够使用.toString()
结果各不相同:
(new Object).toString(); // [object Object]
(new String).toString(); // [object String]
它有助于想象的.toString()
内部的工作,你会想象它会做这样的事情:
// ..
return '[object '+ this.constructor.name + ']';
// ..
希望您现在可以想像的函数变化的this
值将改变被检查的对象。
当你调用通过Object.prototype.toString
。()调用,您可以通过一个新的值被用作this
:
Object.prototype.toString.call(new Date); // [object Date]
我强烈建议你阅读耶胡达·卡茨”简单的3种方式解释影响的this
值调用函数时:
http://yehudakatz.com/2011/08/11/understanding-javascript-function-invocation-and-this/
你是说上面的例子* are * working或* are * working? – 2013-02-26 05:55:06