详谈js原型继承的一些问题

前端之家收集整理的这篇文章主要介绍了详谈js原型继承的一些问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

当我们使用原型链继承时,需要谨慎的定义原型上的方法属性,因为这可能带来意外的结果。

一、谨慎的定义原型上的方法

当我们想为一个构造函数的原型上定义一个方法时,一定要在更改原型后再定义,否则新的原型对象上不会有定义的这个方法,导致与我们预期的结果不同。例:

正确操作如下

二、不要使用对象字面量给原型创建属性/方法

使用对象字面量,就会新创建一个对象,并把新对象的引用地址赋值给构造函数的prototype。例

正确操作如下:

三、对象实例与原型存在直接对应关系。

意思就是说当一个对__proto__就会保存原型的引用地址,即使构造函数的prototype发生改变,也不会对之前创建的实例中的__proto__产生影响。例

四、最好不要给原型上定义值为引用类型的属性

如果在原型上定义值为引用类型的属性,那么所有实例都会共享该属性值(引用类型值,指向同一个对象),当其中一个实例修改该引用类型上的值或属性时,所有实例上的都会发生改变。因此值为引用类型的属性,最好在构造函数中定义。例

修改此数组时,obj2.ary也会发生改变 console.log(obj2.ary[0]);//0

如果不想让实例共享同一个引用对象,那么就应该在构造函数中进行定义。例

修改obj1.ary不会影响obj2.ary console.log(obj2.ary[0]);//1

以上这篇详谈js原型继承的一些问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家。

猜你在找的JavaScript相关文章