第二层:对象间的原型关系

    两个对象的原型关系:每个对象都可以把另一个作为它的原型,并继承原型所有的属性。对象通过内部属性[[prototype]](_ _ proto _ _)指定它的原型。以此方式连接成的对象链成为原型链。

let proto = {
    age: 25,
    describe: function () {
        console.log('name: ' + this.name)
    }
};
let obj = {
    __proto__: proto,
    name: 'obj'
};

继承

>obj.describe
[function]

this总是指向开始查找方法时所在对象

覆写

一个原型链中,一个对象可以覆写上一级的相同键的属性,最先访问的是最下级的对象的属性。

通过原型在对象间共享数据

多个对象可以拥有相同的原型,这个原型持有所有的共享属性。

获取和设置原型

我们可以使用读取原型的函数和通过给定的prototype创建新对象的函数。

-使用给定prototype创建新对象

调用方法:
    Object.create(proto, proDescObj?)
创建原型为proto的对象的同时,可以选择性的添加描述符属性。
例如:

var proto ={};
var marry = Object.create(proto,{
	name:{value:'Marry',writable: true}
});

单一般可以先创建一个空对象,然后手动添加属性,因为描述符比较繁琐。

var proto ={};
var marry = Object.create(proto);
marry.value = 'Marry';
读取对象原型的方法

调用方法:
    Object.getPrototypeOf(obj)
返回obj的原型。

检查一个对象是否为另一个对象的原型

调用方法:
    Object.prototype.isPrototypeOf(obj)
方法检验接收者是否是obj的原型。

var A = {};
var B = Object.create(A);
var C = Object.create(B);
console.log(A.isPrototypeOf(C));	//true
console.log(B.isPrototypeOf(A));	//false
找到定义属性的对象

特殊属性__proto__

某些JS引擎支持它获取和设置对象,可以直接访问[[Prototype]]

var obj = {};
> obj.__proto === Object.prototype
true

检验是否支持:

Object.getPrototypeOf({ __proto__: null }) === null
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值