共计 1087 个字符,预计需要花费 3 分钟才能阅读完成。
JS 中的继承问题
在 JS 初期不存在继承
所谓的继承是强类型语言中的一种概念,指父类将本身的属性继承给子类,子类能够间接应用继承来的属性。
JS 之所以不能继承是因为 JS 中不存在类的概念
原型是 JS 中用来实现继承的办法
原型的初识
原型 就是 对象.__proto__
原型是对象的一个属性 叫做__proto__, 这个属性无需开发者本人写入, 每一个对象创立进去后, 默认就会领有
原型的特点 : 原型是一个对象
原型中的属性会原原本本的继承给对象
对象能够应用原型中的所有属性, 然而原型的属性不是对象的属性
每一个对象都有其对应的构造函数
对象的原型获取其构造函数的办法:constructor
构造函数也有一个属性, 这个属性能够获取到构建函数创立进去的对象的原型 prototype
构造函数 : 构造函数中的所有属性会齐全继承给对象, 这些属性就是对象本身的属性
原型: 原型中的属性也会继承给对象, 然而这些属性不是对象本身的, 而是原型的, 对象只是可能应用
JS 中实现继承的办法
构造函数继承: 灵便,不便,能够一次性创立多个对象
原型继承:原型的继承会将原型中的所有属性继承给对象,然而这些属性值不能灵便的扭转
混合式继承
构造函数和原型独特实现继承
规定:构造函数继承常常须要扭转值的属性
原型继承属性值不须要扭转的属性
原型链
JS 中原型也是对象,因而也会有__proto__属性指向本人的原型,这样在对象的原型,原型和原型的原型之间就会有一个由__proto__
原型链的终点:以后的对象
原型的起点:object.prototype (null)
数组对象的原型链
数组 ->Array.prototype–>Object.prototype–>null
函数的原型链 (函数能够用 var a = new Function(){} 形式申明)
函数 –>Function.prototype–>Object.prototype–>null
Date 对象原型链
Date 对象 –>Date.prototype–>Object.prototype–>null
查看 Math 原型链
原型链的作用: 也是用来实现属性的继承的
例如数组对象, 各种办法都写在了原型中, 尽管申明的数组没有任何属性办法, 然而能够调用
对象的属性查找准则
当一个对象调用属性的时候, 会当初以后对象中查找, 如果有, 就间接应用, 如果没有, 就在对象的原型中查找, 如果有就应用, 如果没有就持续向更高一级的原型查找, 直到找到 Object.prototype, 如果有就用, 如果还没有, 就返回 undefined
重点: 由属性查找准则可知, 在开发过程中不要调用对象没有的属性, 因为会有查找对象的整个原型链, 十分节约性能