我正在阅读斯托扬·斯特凡诺夫的面向对象的javascript书,我完全搞不懂。假设我有一个功能:
function Test(){
this.greeting = 'hello';
}
Test.prototype.farewell = "bye"
test = new Test();
test.constructor; //returns Test()
test.constructor.prototype; //returns {farewell:"bye"}
test.constructor.prototype.constructor; //returns Test()这本书说,由于原型是一个对象,它必须有一个构造函数。但正如上面的例子所示,原型的构造函数与test的构造函数相同,即Test()。
这是意料之中吗?
这本书继续写道:“这可能会持续一段时间,但最终您将得到内置的Object()对象,它是最高级别的父对象”。但是,我似乎陷入了一个无限循环中,因为链中的所有构造函数都返回Test(),所以我如何才能到达Object()。
有人能帮我把事情弄清楚吗?(我甚至不知道为什么这些锁链有用。)
发布于 2014-10-04 12:04:41
你说的完全正确。prototype对象得到了错误的构造函数,因为它适合使用它作为原型的东西,而不是它自己。这意味着在这方面,原型不是常规的对象。它们有一个特殊的角色,就像一个类对象。
如果您还没有注意到,那么您的告别就像一个经典类的静态成员。它不是每个对象都存在的变量。
如果书上说你可以沿着构造函数的指针向上走,那就错了。您可以沿着getPrototypeOf()沿着链向上移动。{在这里编辑了错误的下面的东西。}
至于为什么这些都是有用的,当你有令人敬畏的鸭子打字自由时,我不能回答。
https://stackoverflow.com/questions/26192489
复制相似问题