在原型链上进行批量设置公有属性和常用的六种继承方式

一、在js的原型链模式下,如何进行批量设置公有属性?

在原型链上进行批量设置公有属性和常用的六种继承方式在原型链上进行批量设置公有属性和常用的六种继承方式

在原型链上进行批量设置公有属性和常用的六种继承方式

在原型链上进行批量设置公有属性和常用的六种继承方式

手动设置constructor为Fn,而不是Object:

在原型链上进行批量设置公有属性和常用的六种继承方式

在原型链上进行批量设置公有属性和常用的六种继承方式

在原型链上进行批量设置公有属性和常用的六种继承方式

二、原型链模式的六种常见继承方式:

在原型链上进行批量设置公有属性和常用的六种继承方式

在原型链上进行批量设置公有属性和常用的六种继承方式

propertyIsEnumerable()方法是判断是否为可枚举属性,对象的私有属性是可枚举的,公有属性(在obj所属类的.prototype上的)是不可枚举的,这里的if判断是输出obj的可枚举属性(私有属性),这个判断方法效果等同与hasOwnProperty()方法的判断结果,hasOwnProperty()用于判断对象的私有属性。

在原型链上进行批量设置公有属性和常用的六种继承方式

现在的Fn.prototype是Fn,指向同一个内存地址,所以说Fn.prototype改变,函数Fn也会跟着改变,而Fn改变,那么Fn.prototype也会跟着改变。

但是我们不想他们两个发生改变的联动,Fn.prototype修改是Fn不变,那该怎么做?

可以把obj克隆一份:

在原型链上进行批量设置公有属性和常用的六种继承方式

这种方法可以,但是麻烦,可以使用ESACJavascript5新增的create方法:

在原型链上进行批量设置公有属性和常用的六种继承方式

在原型链上进行批量设置公有属性和常用的六种继承方式

在原型链上进行批量设置公有属性和常用的六种继承方式

obj2.getY可以输出2,obj2中没有私有属性,但是把obj的私有属性作为obj2上一级的私有属性,相当于在obj2和Object之间增加一层。

原型继承:

都知道:

在原型链上进行批量设置公有属性和常用的六种继承方式

原型继承例子:

在原型链上进行批量设置公有属性和常用的六种继承方式

//B继承A,就是在B的原型指向A的实例

在原型链上进行批量设置公有属性和常用的六种继承方式

在原型链上进行批量设置公有属性和常用的六种继承方式

在原型链上进行批量设置公有属性和常用的六种继承方式

在原型链上进行批量设置公有属性和常用的六种继承方式

Call继承:

在原型链上进行批量设置公有属性和常用的六种继承方式

在原型链上进行批量设置公有属性和常用的六种继承方式

在原型链上进行批量设置公有属性和常用的六种继承方式

冒充对象继承:

在原型链上进行批量设置公有属性和常用的六种继承方式

在原型链上进行批量设置公有属性和常用的六种继承方式

混合模式继承:

在原型链上进行批量设置公有属性和常用的六种继承方式

在原型链上进行批量设置公有属性和常用的六种继承方式

在原型链上进行批量设置公有属性和常用的六种继承方式

寄生组合继承:

在原型链上进行批量设置公有属性和常用的六种继承方式

在原型链上进行批量设置公有属性和常用的六种继承方式

公有的只拿公有的,私有的就公私属性都有。

周氏继承法

中间类继承法-------不兼容