本文共 1159 字,大约阅读时间需要 3 分钟。
1. 构造函数法
function Person(name) { var name = name this.sayName = function () { console.log(name) } } var person1 = new Person('ss') person1.sayName() //ss var person2 = new Person('bb') person2.sayName() //bb console.log(person1.sayName == person2.sayName) //false。每个实例的同名方法都要重新创建。
2. 原型访问
function Person(name) { var name = name Person.prototype.sayName = function () { console.log(name) } } var person1 = new Person('ll') person1.sayName() //ll var person2 = new Person('bb') person2.sayName() //bb console.log(person1.sayName === person2.sayName) //true。每个实例的方法都是动态共享的。但每个实例都没有自己的私有变量。
私有变量若痛过原型方法访问,私有变量就是动态共享的;若通过实例方法访问,私有变量在每个实例中都有其特异性。而实例属性不同,实例属性将覆盖同名原型属性,且永远是特异性的。
3. 模块模式
前面的方法都是为自定义类型创建特权方法,而模块模式是为单例创建特权方法。
var person = function () { var name = "Bob"; //私有变量 function privateFunction() { //私有函数 console.log('私有函数') }; return { publicName: name, //特权属性 publicMethod: function () { //特权方法 privateFunction(); } } }(); console.log(person.publicName)//Bob person.publicMethod() //私有函数
转载地址:http://rdhwi.baihongyu.com/