JavaScript核心(晋级高手必读篇)
来源:互联网 发布:sql面试必会6题经典 编辑:程序博客网 时间:2024/05/16 11:16
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(); // 30c.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 0
- JavaScript核心(晋级高手必读篇)
- JavaScript核心(晋级高手必读篇)
- JavaScript核心(晋级高手必读篇)
- !!深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)
- 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)
- 深入理解JavaScript系列(7):JavaScript核心(晋级高手必读篇)
- 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)
- 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)
- 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)
- 深入理解JavaScript系列 ----(10):JavaScript核心(晋级高手必读篇)
- 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)
- 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)
- 深入JavaScript(15)JavaScript核心(晋级高手必读篇)
- 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)
- 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)
- 100篇论文--大数据高手晋级
- 成为高手的必经之路——学会调试代码(菜鸟必读)(JavaScript)
- JavaScript新手必读:高手是怎样炼成的!
- Java程序:使用LinkedList存储扑克牌,实现洗牌功能
- Lucene - 自定义过滤器Filter
- What is Vertical Align?
- 设计模式——策略模式
- 数据结构—二叉树(C语言实现)
- JavaScript核心(晋级高手必读篇)
- jquery数字递增递减
- HDU 5011-game -nim游戏变种
- quartz定时器demo类
- hdu 1384逆序数 暴力法
- F - The MAX(sort)
- DOM 文档对象模型
- 解决munmap_chunk(): invalid pointer和Segmentation fault的bug
- git解决冲突的办法