之前討論過JavaScript中的寫類方式。但沒有討論私有的實現。這篇看下。
我們知道JS中私有屬性的實現本質就是 var + closure。如下
復制代碼 代碼如下:
function Person(n, a){ 
    // public 
    this.name = n; 
    // private 
    var age = a; 
    this.getName = function(){ 
        return this.name; 
    } 
    this.getAge = function(){ 
        return age; 
    } 
} 
復制代碼 代碼如下:
var p = new Person('jack',23); 
console.log(p.age);  // undefined 
console.log(p.getAge()); // 23 
復制代碼 代碼如下:
/** 
 * @param {String} className 
 * @param {Function} classImp 
 */
function $class(className, classImp){ 
    function clazz(){ 
        if(typeof this.init == "function"){ 
            this.init.apply(this, arguments); 
        } 
    } 
    classImp.call(clazz.prototype); 
    window[className] = clazz; 
} 
復制代碼 代碼如下:
$class('Person', function(){ 
    // 私有屬性都定義在這 
    var age = ''; 
    this.init = function(n, a){ 
        // 共有屬性掛在this上,初始化 
        this.name = n; 
        // 私有屬性初始化 
        age = a; 
    }; 
    this.getName = function(){ 
        return this.name; 
    }; 
    this.getAge = function(){ 
        return age; 
    } 
}); 
復制代碼 代碼如下:
var p = new Person('jack',23); 
console.log(p.name); // jack 共有的可使用點操作符獲取 
console.log(p.age); // undefined 私有的不能通過點操作符獲取 
console.log(p.getAge()); // 23 私有的age只能通過共有的方法getAge獲取 
新聞熱點
疑難解答
圖片精選