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

Javascript prototype - applies not only for instance objects?

本文关键字:适用于 实例 对象 原型 Javascript      更新时间:2023-09-26
原型在整个JavaScript中使用,

作为定义方便的方法将自动应用于 实例的属性和功能对象

所以如果我写这个:

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

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

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

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

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

问题:

  • 似乎原型也为非实例对象应用了方法......

我在 mdn 中找不到对这种确切行为的任何解释.

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

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

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

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