上一篇寫了個工具函數$class,這篇再完善以下。實現以下功能
1,繼承
2,子類別繼承父類別時,不繼承父類別的私有屬性
/**
* @param {String} className
* @param {String/Function} superCls
* @param {Function} classImp
*/
function $class(className, superCls, classImp){
if(superCls === '') superCls = Object (){
if(typeof this.init == "function"){
🎜> var p = clazz.prototype = new superCls();
var _super = superCls.prototype;
window[className] = clazz;
classImp.apply(p, [super]);
先寫父類別
複製程式碼
程式碼如下:
🎜> // 公有屬性name
this.name = n;
this.getName = function(){
return this.name;
};
this.setName = function(name){
return age;
};
this.setAge = function(a){
age = a;
繼承於Person
複製程式碼
程式碼如下:
$class("Man",Person, function(supr){
var school;
this.init = function(n, a, s){
s;
}
this.getSchool = function(){
return school;
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