js之Object.assign()的简单使用

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值