js

私有成员和特权方法

2017-03-01  本文已影响3人  u14e

模块模式:用于创建拥有私有数据的单件对象的模式

使用IIFE返回一个对象

var person = (function() {
    // 私有属性
    var age = 25;

    // 公有属性和方法
    return {
        name: 'u14e',
        getAge: function() {
            return age;
        }
        grow: function() {
            age++;
        }
    }
}());

暴露模块模式

var person = (function() {
    // 私有属性
    var age = 25;

    function getAge() {
        return age;
    }

    function grow() {
        age++;
    }
    
    return {
        name: 'u14e',
        getAge: getAge,
        grow: grow,
    }
}())

构造函数的私有成员

function Person(name) {
    // 私有属性
    var age = 25;

    this.name = name;
    this.getAge = function() {
        return age;
    }
    this.grow = function() {
        age++;
    }
}

模块模式和构造函数结合

var Person = (function() {
    // 私有属性
    var age = 25;

    function InnerPerson(name) {
        this.name = name;
    }

    InnerPerson.prototype.getAge = function() {
        return age;
    }

    InnerPerson.prototype.grow = function() {
        age++;
    }

    return InnerPerson;
}());

var person1 = new Person('u14e');
var person2 = new Person('u148');

console.log(person1.name);      // 'u14e'
console.log(person1.getAge());  // 25

console.log(person2.name);      // 'u148'
console.log(person2.getAge());  // 25

person1.grow();

console.log(person1.getAge());  // 26
console.log(person2.getAge());  // 26

Person的全部实例共享age变量,在一个实例上的改动会影响另一个

上一篇 下一篇

猜你喜欢

热点阅读