Javascript原型 - 不仅适用于实例对象吗?

时间:2013-10-26 16:18:30

标签: javascript

原型在整个JavaScript中用作定义的便捷方式 将自动应用于实例的属性和功能 对象

所以,如果我写这个:

function Ninja(){} 
Ninja.prototype.swingSword = function(){ 
return true;
};

var ninja1 = Ninja(); 

然后,所有忍者都会有这个方法。

但是,如果它仅用于实例对象 - 为什么以下代码有效?

Object.prototype.test1=function (){alert(this);};
Object.test1();

Object是普通对象,而不是实例对象。

问题:

  • 似乎原型也适用于非实例对象的方法......

我无法在mdn中找到确切行为的任何解释

2 个答案:

答案 0 :(得分:2)

通常这不起作用。您的代码有效,因为您向Object原型添加了函数,而Object是函数,即Function的实例,而'Function.prototype'是Object的实例< / p>

答案 1 :(得分:1)

当您扩展Object的原型时,您添加的属性可用于所有对象,因为它是所有JS对象的根目录:

Object.prototype.test1 = function(){ console.log('test1') };
({}).test1(); // logs test1
(new Image()).test1(); // logs test1

与所有构造函数一样,Object是一个函数。而JavaScript中的一个函数是一个对象。