在Javascript中,对象具有assign
函数。由于对象文字的__proto__
为Object.prototype
,为什么对象文字不能使用assign
并且必须直接通过Object?
Object.assign({}, {hello: 'world'})
const o = {};
o.assign({add: 'more stuff'})
答案 0 :(得分:3)
对象原型上没有方法assign
。打开F12控制台,然后键入Object.prototype
,以查看基础对象原型上可用的内容。
Object.assign
被认为是静态方法,而不是实例方法。
答案 1 :(得分:1)
这是因为assign
是一种静态函数。尚未在原型中定义。
这里是一个例子:
function SomeClass(foo) {
this.foo = foo;
}
// this is a method, it is attached to the prototype
SomeClass.prototype.showFoo = function() {
console.log(this.foo);
}
// this is a static method, it is not attached to the prototype
SomeClass.bar = function() {
console.log("bar");
}
var instance = new SomeClass("foo");
console.log(instance.showFoo); // OK
console.log(instance.bar); // not OK
console.log(SomeClass.showFoo); // not OK
console.log(SomeClass.bar); // OK
答案 2 :(得分:0)
assign
函数不在Object
的prototype属性中,创建的对象只能访问其上定义的属性和方法,以证明我们可以这样做:
Object.prototype.assign = function(){}; // this create a function called assign in the prototype property of Object
var obj = {};
obj.assign(); // Now we can access the assign function with the object literal
希望获得帮助。