JavaScript核心

JavaScript核心 :

对象(Object) :

说明 :

  • Object 是一个属性的集合,并且都拥有一个单独的原型对象[prototype object]. 这个原型对象[prototype object]可以是一个 object 或者 null 值.

JavaScript 实例 :

var foo = {
    x: 10,
    y: 20,

    showPos : function(){
        console.log(this.x + "|" + this.y);
    }
};

console.log(foo);

console.log(foo.__proto__);

console.log(foo.__proto__.__proto__);

输出结果 :

这里写图片描述

总结 :

这里写图片描述

foo.__proto__ 
  • 这个属性是用来存储该对象的原型 , foo 的原型是 Object {} , Object {} 的原型是 null .
  • 原型链的终点就是 null.

原型链(Prototype chain):

说明 :

  • 原型对象也是普通的对象,并且也有可能有自己的原型,如果一个原型对象的原型不为null的话,我们就称之为原型链(prototype chain).
  • 原型链是一个由对象组成的有限对象链由于实现继承和共享属性.

适用情况 :

假设,2个对象,大部分内容都一样,只有一小部分不一样,很明显,在一个好的设计模式中,我们需要重用那部分相同的,而不是在每个对象中重复定义那些相同的方法或者属性。在基于类[class-based]的系统中,这些重用部分被称为类的继承 – 相同的部分放入class A,然后class B 和 class C 从 A 继承.

ECMAScript没有类的概念。但是,重用[reuse]这个理念没什么不同(某些方面,甚至比class-更加灵活),可以由prototype chain原型链来实现. 或者通俗一些,叫做原型继承.

JavaScript 实例 :

var a = {
    x: 10,
    calculate: function () {
        console.log(this.x + this.y);
    }
};

var b = {
    y: 20,
    __proto__: a
};

var c = {
    y: 30,
    __proto__: a
};

// 调用继承过来的方法
b.calculate(); // 30
c.calculate(); // 40

输出结果 :

这里写图片描述

总结 :

b 和 c 的 _proto_属性设置为 a , b 和 c 可以使用 a 中定义的 calculate 方法,这就是有原型链来[prototype chain]实现的.

原理 :

在对象 b 中找不到 calculate 方法, 那么就会沿着原型链开始找。如果这个calculate方法在b的原型(prototype)中没有找到,那么就会沿着原型链找到 a 的原型(prototype),一直遍历完整个原型链。一旦找到,就返回第一个找到的属性或者方法。因此,第一个找到的属性成为继承属性。如果遍历完整个原型链,仍然没有找到,那么就会返回undefined。

注意 :

this这个值在一个继承机制中,仍然是指向它原本属于的对象
如果一个对象的prototype没有显示的声明过或定义过,那么_prototype_的默认值就是object.prototype, 而object.prototype也会有一个_prototype_, 这个就是原型链的终点了,被设置为null。

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值