在Object和Object.prototype上分配属性有什么区别? 例如
Object.test =function(){};
和
Object.prototype.test =function(){}
答案 0 :(得分:2)
第一个给Object
一个静态方法,该方法可以直接从类中调用,而无需实例。例如:
Object.test =function(){
console.log('Object test running');
};
Object.test();
另一方面,
将函数分配给 prototype 允许 instances 运行该方法:
Object.prototype.test = function() {
console.log('test running on object ', this);
};
// don't use the object constructor, this is just an example:
const obj = new Object();
obj.test();
如果您不使用内置的Object
(可能是一切继承自的),则可能会更有意义:
function Foo() {}
Foo.checkIfFoo = function(arg) {
return arg instanceof Foo;
};
const f = new Foo();
console.log(Foo.checkIfFoo(f));
在这里,foo.checkIfFoo
是Foo
上的一个辅助函数,用于检查传递的对象是否是Foo
的实例-不需要实例来运行{{1 }} 。另一方面,原型上的功能需要要运行的实例:
checkIfFoo
请注意,在ES6 +中,您可以使用function Foo() {
this.info = 'A Foo instance';
}
Foo.prototype.checkInfo = function() {
console.log(this.info);
};
const f = new Foo();
f.checkInfo();
关键字将函数直接放在类上:
static
标准方法缺少// roughly equivalent to the snippet with checkIfFoo above
class Foo {
static checkIfFoo(arg) {
return arg instanceof Foo;
}
}
const f = new Foo();
console.log(Foo.checkIfFoo(f));
关键字:
static