原型在整个JavaScript中用作定义的便捷方式 将自动应用于实例的属性和功能 对象
所以,如果我写这个:
function Ninja(){}
Ninja.prototype.swingSword = function(){
return true;
};
var ninja1 = Ninja();
然后,所有忍者都会有这个方法。
但是,如果它仅用于实例对象 - 为什么以下代码有效?
Object.prototype.test1=function (){alert(this);};
Object.test1();
Object是普通对象,而不是实例对象。
问题:
我无法在mdn中找到确切行为的任何解释。
答案 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中的一个函数是一个对象。