Object.assign()用于合并/复制对象的属性。
Object.assign(target, source_1, ..., source_n).
首先定义一个js function对象,设置一个属性num=10并添加一个$abc的方法
var A = function() { this.num=10 }
A.prototype.$abc = function() { console.log(this.num); }
通过Object.assign直接复制A的所有方法到空对象{}中
var b = Object.assign({}, A.prototype)
b.$abc() 打印undefined,因为这个是A的对象的属性,直接使用A.prototype不会复制num,
var b = Object.assign({}, new A())
b.$abc() 这里将会报错,因为这里直接复制的是A的对象的属性值,A通过prototype定义的方法不会复制
var b = Object.assign({__proto__:A.prototype}, new A())
b.$abc() 正常打印10,复制A的prototype属性到新对象的原型链中,等于b直接拥有了A的$abc方法,然后复制A的对象的属性,相当于把num复制给了b,这样调用$abc就相当于获取了b的num的值了,所以打印10
var D = Object.assign(A.prototype, {x:100,$call:function() {console.log(this.num*this.x/3)}})直接可以给A扩展属性或方法,会修改A.prototype
查看A.prototype现在的状态:
{x: 100, $abc: ƒ, $call: ƒ, constructor: ƒ}
a = new A() 创建一个对象
a.num 打印10
a.x 打印100
a.$abc()打印10
a.$call()打印333.3333333333333