JavaScriptに私有属性を実現する書き込み方法(2)
2016 ワード
前のページにツール関数$classを書いていますが、これは以下のように改善されます.以下の機能を実現する
1,継承する
2,サブクラスが親クラスを継承する場合、親クラスの私有属性は引き継がれません.
1,継承する
2,サブクラスが親クラスを継承する場合、親クラスの私有属性は引き継がれません.
/**
* @param {String} className
* @param {String/Function} superCls
* @param {Function} classImp
*/
function $class(className, superCls, classImp){
if(superCls === '') superCls = Object;
function clazz(){
if(typeof this.init == "function"){
this.init.apply(this, arguments);
}
}
var p = clazz.prototype = new superCls();
var _super = superCls.prototype;
window[className] = clazz;
classImp.apply(p, [_super]);
}
先写个父类
筆記子類は、Personに継承されます./** * Person */ $class('Person','',function(){ // age var age; this.init = function(n, a){ // name this.name = n; // age = a; }; this.getName = function(){ return this.name; }; this.setName = function(name){ this.name = name; } this.getAge = function(){ return age; }; this.setAge = function(a){ age = a; }; });
newのサブクラスの例$class("Man",Person, function(supr){ var school; this.init = function(n, a, s){ supr.init.apply(this, [n,a]); school = s; } this.getSchool = function(){ return school; }; this.setSchool = function(s){ school = s; }; });
var m = new Man('tom', 25, 'pku'); console.log(m.name); // tom name console.log(m.age); // undefined age console.log(m.getAge()); // 25 getAge age console.log(m.school); // undefined Man console.log(m.getSchool()); // pku getSchool() school