javascript教程之不完整的继承(js原型链) |
Javascript的继承和标准的oop继承有很大的区别,Javascript的继承是采用原型链的技术,每个类都会将“成员变量”和“成员函数”放到 prototype 上,Js++都过superclass将其链接起来,即 C.prototype.superclass = C.superclass = P.prototype; 复制代码 代码如下: package.j(function () { class A.j(function () { jpublic({ v:{a: 1} }); jprivate({ p:{a:1} }); jprotected({ x:{a:1} }); }); class B extends A.j(function () { }); var b1 = new B(); console.log(b1.v.a) // 输出为 5 console.log(b2.v.a) // 输出也为 5,并不是预想的 1 如何解决此问题? Js++提供了类似的方法,只要在jprivate中定义的“成员变量”或“成员函数”都会分配到对象的__proto__上,且只有本实例可用, jprotected中定义的“成员变量”(其本身是对象)也会分配到对象的__proto__上,且只有继承他的可用, B. 原型链上只定义只读的“成员变量”(其本身是对象) C.jpublic 定义的“成员变量”(其本身是对象)中的成员,只是只读成员,切记不可赋值,否则会在各个实例中共享 。 |