Object.createa()和 new 的区别

区别

Object.create 创建的新函数并没有继承构造函数的属性和方法,只继承了原型方法和原型属性
new在实现 Object.create 的基础上,继承了原对象的属性和方法

 var Base=function(){
        this.a = 2
        this.b = 4
    }

    Base.prototype.c = 3;
    var o1= new Base();
    var o2 = Object.create(Base);

    console.log(o1.a);
    console.log(o2.a);//那这样创建有什么用呢

打印调试结果
在这里插入图片描述
再直观一点:
在这里插入图片描述

代码实现

Object.create
function createObject(object){
    function F(){};
    F.prototype = object;
    return new F();
}
const person= {
    name:'willim',
}
const p1 = createObject(person);
console.log(p1.name);
new
function newFunction() {
    let res = {};
    let construct = Array.prototype.shift.call(arguments);
    //对象的原型 赋值
    res.__proto__ = construct.prototype;
    let turn = construct.apply(res, arguments);
    //返回对象
    return turn instanceof Object ? turn : res;
}

function Person(name, age) {
    this.name = name;
    this.age = age;
}

Person.prototype.sayHi = function () {
    console.log(this.name);
}
var person1 = newFunction(Person, 'xm', 18);
console.log(person1.age);
person1.sayHi();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>