gpt4 book ai didi

javascript - 在 Object 和 Object.prototype 上分配属性有什么不同?

转载 作者:行者123 更新时间:2023-11-29 20:42:52 24 4
gpt4 key购买 nike

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

Object.test =function(){};

Object.prototype.test =function(){}

最佳答案

第一个为 Object 提供了一个静态方法,它可以直接从类中调用,无需实例。例如:

Object.test =function(){
console.log('Object test running');
};

Object.test();

另一方面,将函数分配给原型(prototype),允许实例运行该方法:

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 的实例 - < em>运行 checkIfFoo 不需要实例。另一方面,原型(prototype)上的函数需要一个实例来运行:

function Foo() {
this.info = 'A Foo instance';
}
Foo.prototype.checkInfo = function() {
console.log(this.info);
};

const f = new Foo();
f.checkInfo();

请注意,在 ES6+ 中,您可以使用 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 关键字:

// roughly equivalent to the snippet with checkInfo above
class Foo {
constructor() {
this.info = 'A Foo instance';
}
checkInfo() {
console.log(this.info);
}
}
const f = new Foo();
f.checkInfo();

关于javascript - 在 Object 和 Object.prototype 上分配属性有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55092148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com