Javascript:为什么不能按原义使用assign?

时间:2018-11-29 21:42:08

标签: javascript

在Javascript中,对象具有assign函数。由于对象文字的__proto__Object.prototype,为什么对象文字不能使用assign并且必须直接通过Object?

Object.assign({}, {hello: 'world'})

const o = {};
o.assign({add: 'more stuff'})

3 个答案:

答案 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

希望获得帮助。