0

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

所以如果我写这个:

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

var ninja1 = Ninja(); 

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

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

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

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

问题:

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

我在 mdn 中找不到对该确切行为的任何解释。

4

2 回答 2

2

通常这不起作用。您的代码有效,因为您将函数添加到Object原型,并且Object是函数,即实例Function,并且“Function.prototype”是实例Object

于 2013-10-26T16:26:41.510 回答
1

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

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

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

于 2013-10-26T16:26:06.300 回答