一、在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继承:
冒充对象继承:
混合模式继承:
寄生组合继承:
公有的只拿公有的,私有的就公私属性都有。
周氏继承法
中间类继承法-------不兼容