【发布时间】:2015-07-07 19:05:23
【问题描述】:
举个例子
var Func = function(){}
这里 Func 有一个名为原型的属性,我可以添加我的自定义方法,如下所示。
Func.prototype.move = function(){ //do something }
根据我的理解,原型只是 Func 的另一个属性,默认情况下由解释器提供,不用于委托任何功能,即。没有什么像
Func.move()
应用相同的逻辑,我正在创建相同函数的另一个属性,如下所示
Func.method = function(){ //do something }
现在如果创建一个新对象
var obj = new Func();
这里有obj.move(),但obj.method() 不会在那里。如果原型只是另一个没有神奇优势的属性,那么为什么会有这种行为呢?提前致谢!
【问题讨论】:
-
你错了。函数的
prototype属性是神奇的。 -
prototype属性用于在prototype chain中查找属性/函数。因此,当您询问任何object中的property时,首先它会查找object本身,如果未找到,则通过object的prototypical chain搜索到Object。对您的示例非常特别,您将method属性直接添加到Func对象上,因此在这种情况下,它仅在Func上的该实例上可用,并且您将move属性添加到@ 的原型987654341@,因此将通过prototypical chain lookup提供。
标签: javascript prototype