2022-03-14 Object.create的定义和用法,Object.create和new的区别

本文回顾了构造函数、实例对象和原型对象的关系,并详细介绍了Object.create()方法的定义、语法和示例,强调了它与new操作符在设置__proto__属性上的差异。通过举例说明,解释了如何使用构造函数的原型对象作为Object.create实例的原型对象,并提供了相关视频参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0.复习:构造函数,实例对象和原型对象的三者关系

在这里插入图片描述
*主要是补充一个知识点:实例对象也有constructor属性,指向其构造函数

function Person() {this.name = 'zs';}
Person.prototype.say = function() {console.log("hello");}
var p1 = new Person();
console.log(p1.constructor == Person);//true
1.object.create
定义

Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__
意思是用一个已经存在的现有对象用来做Object.create()创建出的新对象的原型对象

语法
Object.create(proto[, propertiesObject])

①proto:传递一个现在有的对象,即新对象的原型对象(新创建的对象_proto_属性指向现有属性)。第一个参数proto的值为null,那么创建出来的对象是一个{}(空对象)并且没有原型;
②propertiesObject:可选,给新对象添加新属性以及描述器。如果没有指定即创建一个{},有原型也有继承Object.prototype上的方法。

示例
var _Aobj = {
    name: "zs",
    say() {
        console.log("我叫" + this.name);
    }
};
var a = Object.create(_Aobj, {//手动绑定:将_Aobj作为实例对象a的原型对象
    "age": {//给新对象添加新属性age
        value: 18
    }
});
console.log(a); //{age:18;}
console.log(a.__proto__, a.__proto__ == _Aobj); //{name: 'zs', say: ƒ} true
2.object.create和new的区别
  • 最明显的区别是两者对__proto__属性的操作不同,Object.create是手动设置的,使用一个现有对象来作为的__proto__(实例对象的原型对象),new创建的实例对象,其__proto__会自动指向其构造函数的原型对象
  • new创建的实例对象会继承构造函数的属性和方法,Object.create创建的实例对象不包含属性和方法,要通过第二个参数来给新对象添加新属性
3.如果使用构造函数的原型对象作为Object.create实例的原型对象
    function Person() {
        this.name = "zs";
    }
    Person.prototype.age = 18;
    Person.prototype.say = function() {
        return this.name;
    };
    var p1 = new Person();
    var p2 = Object.create(Person.prototype);
    console.log(p1, p2);
    console.log(p1.name, p1.age, p1.say());
    console.log(p2.age, p2.say); //没有name属性

从定义上看:

new创建了一个实例,这个实例就是用户定义的对象类型
Object.create应该是创建了一个对象,这个对象的类型是Person

从结果上看:

new创建的实例中既有对象Person原本的属性,也包括原型上的属性和方法
Object.create创建的对象的原型为对象Person,但是没有里面的属性,只有**Person的原型**上的属性和方法
4.参考视频

Object.create()方法详解,与new操作符的区别
进度一:07’34"
进度二:11’55"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端OnTheRun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值