本文共 1710 字,大约阅读时间需要 5 分钟。
原型对象虽然可以对所有实例的属性和方法共享,但是它的局限性也是很明显的,这是因为共享的特性,也导致原型存在的最大问题,原型里的属性和方法会被所有对象所共享: static。
function Person(){ }Person.prototype = { constructor:Person , name: 'z3' , age: 20 , job : '程序员' , friends : ['李四','王五'] , sayName : function(){ alert('我的名字!')}}; var p1 = new Person();var p2 = new Person(); p1.friends.push('赵六');alert(p1.friends); //李四,王五,赵六alert(p2.friends); //李四,王五,赵六alert(p1.sayName == p2.sayName); //true
因此,我们通常使用原型和构造函数式
function Person(name , age , friends , job){ this.name = name ; this.age = age ; this.friends = friends ; this.job = job ;}Person.prototype = { constructor: Person , //不考虑被遍历的问题 sayName : function(){ alert(this.name); }};var p1 = new Person('z3' , 20 , ['王五','赵六'] , '技术总监');var p2 = new Person('李四', 25 , ['王五','赵六' ,'赵7'] ,'boss');alert(p1.friends); //王五,赵六p1.sayName(); //z3alert(p2.friends); //王五,赵六,赵7p2.sayName(); //李四
就是把信息都封装到函数中,这样体现了封装的概念
function Person(name , age , friends , job){ this.name = name ; this.age = age ; this.friends = friends ; this.job = job ; //动态原型方法: if( typeof this.sayName != 'function'){ Person.prototype.sayName = function(){ alert(this.name); }; }}
所谓稳妥模式就是没有公共属性,而且其他方法也不引用this对象,稳妥模式最适合在安全的环境中使用。如果你的程序对于安全性要求很高,那么非常适合这种原型模式
function Person(name , age , job){ // 创建一个要返回的对象 var obj = new Object(); //可以定义一下私有的变量和函数 private var name = name ; //var sex = '男'; //var saySex = function(){}; //添加一个方法 obj.sayName = function(){ alert(name); } return obj ; }var p1 = new Person('张三');p1.sayName();
转载地址:http://rhrgi.baihongyu.com/