我在写
vools.js 的时候 发现我写的对象继承的方式有点怪 , 后来去查阅了一下资料 。 还真的是这样 , 。
今天下午写
12345var UI = function (){};UI.prototype = VoolsEvent.prototype;
如果是玩多重继承
的话
12345678910111213141516171819202122232425var A = function (){ this.constructPropertyA = 'AAA';};A.prototype.iAmA = 'i am A';var B = function (){ this.constructPropertyB = 'BBB';};B.prototype.iAmB = 'i am B';var C = function (){ this.constructPropertyC = 'CCC';};C.prototype.iAmC = 'i am C';B.prototype = A.prototype;C.prototype = B.prototype;for (var key in new C) { console.log(key);}// console output 'iAmA'
没错iAmB
和 iAmC
属性iAmA
什么是原型链
JS原型链(Prototype Chain)
的机制
[A (constructPropertyA), {iAmA}]
↓
[B (constructPropertyB), {iAmB}]
↓
[C (constructPropertyC), {iAmC}]
new C;
/*
C {
constructPropertyC,
prototypeChain: B {
iAmB,
prototypeChain: A {
iAmA
}
}
}
*/
如果你想访问**CiAmA
**属性的话constructPropertyC
iAmA
prototypeChain
当然
1234567891011121314151617181920212223242526272829303132function Animal(){}Animal.prototype.type = ' 哺乳动物 ';Animal.prototype.setAge = function (value){ this.age = value;};function People(){}People.prototype.setName = function (value){ this.name = value;};function Female(name, age){ this.setName(name); this.setAge(age);}Female.prototype.sex = ' 女 ';People.prototype.__proto__ = Animal.prototype;Female.prototype.__proto__ = People.prototype;var 妹子 = new Female('lily', 17);for (var key in 妹子) { console.info(key);}// console output 'name'// console output 'age'// console output 'sex'// console output 'setName'// console output 'type'// console output 'setAge'
终于实现了应该要有的效果了 之前写错的地方。。。也得改过来orzorzorz