Object.create用法

用法: Object.create(object, [,propertiesObject])

创建一个新对象,继承object的属性,可添加propertiesObject添加属性,并对属性作出详细解释(此详细解释类似于defineProperty第二个参数的结构)

var banana= {
    color: 'yellow',
    getColor: function(){
        return this.color
    }
}
//创建对象sub_banana
var sub_banana= Object.create(banana) console.log(sub_banana.color) //yellow console.log(sub_banana.getColor()) //yellow

添加propertiesObject

"use strict"
var banana= {
    color: 'yellow',
    getColor: function(){
        return this.color
    }
}
var sub_banana= Object.create(banana, {
  //添加taste属性 taste: {
    //详细解释 writeable:
false, get: function(){ console.log('getTaste') return 'good' } },
  //添加weight
  weight: {
    value: 600
  } }) console.log(sub_banana.color) console.log(sub_banana.getColor()) console.log(sub_banana.taste) //good
console.log(sub_banana.weight) //600 sub_banana.taste
= 'bad' //报错,writeable为false不可改变

此方法也常用于创建对象实例

function theSuper(_a){
    this.a= 100
}
theSuper.prototype.getA= function(){
    return this.a
}
//继承prototype
var sub1= Object.create(theSuper.prototype)
//继承prototype而不是构造函数内的值 console.log(sub1.a) //undefined sub1.a
= 100 console.log(sub1.getA()) //100

那么,此方法与new obj()的区别在哪?

Object.create的实现核心代码:

Object.create =  function (o) {
    var F = function () {};
    F.prototype = o;
    return new F();
};

可见: 创建函数,将传递的对象赋给函数的prototype,再返回函数实例。

 

new obj()的核心实现代码:

var o1 = new Object();
o1.[[Prototype]] = Base.prototype;
Base.call(o1);

创建对象,将被继承对象的prototype赋给此对象,并且调用被继承对象的方法来为其初始化。(因此new obj()不仅能继承prototype,也能继承构造函数内属性)

 

转载于:https://www.cnblogs.com/yanze/p/8085565.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值