在Object和Object.prototype上分配属性有什么区别?

时间:2019-03-10 20:36:19

标签: javascript

在Object和Object.prototype上分配属性有什么区别? 例如

Object.test =function(){};

Object.prototype.test =function(){}

1 个答案:

答案 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.checkIfFooFoo上的一个辅助函数,用于检查传递的对象是否是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