1 //工厂模式 2 function createPerson (name, age, job){ 3 var o = new Object(); 4 o.name = name; 5 o.age = age; 6 o.job = job; 7 8 o.sayName = function (){ 9 alert(this.name); 10 } 11 return o; 12 } 13 14 var sam = createPerson("sam", 18, "web front"); 15 16 17 //构造函数模式 18 function Person (name, age, job){ 19 this.name = name; 20 this.age = age; 21 this.job = job; 22 this.sayName = function (){ 23 alert(this.name); 24 } 25 } 26 27 var david = new Person("david",18,"student");
原型模式
我们创建的每一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是可包含可以由特定类型的所有实例共享的属性和方法;(还不会自己总结- -)
缺点:构造函数创建的每一个实例都会创建每一个实例的function实例,而每一个实例的function实例都不相等;(解决方法:高射147页,第三版)
1 alert(person1.sayName == person2.sayname); //false;
构造函数
构造函数其实也是普通的函数对象,构造函数与其他函数唯一的区别就是:当它通过 new操作符调用时,它就可以变成构造函数
将构造函数当作普通函数使用时,构造函数会将构造函数的参数添加给全局对象的属性(window);
hasOwnProperty()方法 检测属性是实例创建的还是继承原型
1 Person2.prototype.name = "sam"; 2 Person2.prototype.age = 18; 3 Person2.prototype.sayName = function (){ 4 alert(this.name); 5 } 6 7 var person1 = new Person2(); 8 var person2 = new Person2(); 9 alert(person1.hasOwnProperty(‘name‘)); // false; 10 11 person1.name = "david"; 12 alert(person1.name); // "david" ----来自实例; 13 alert(person1.hasOwnProperty(‘name‘)); // true; 14 15 alert(person2.name); // "sam" ----来自原型; 16 alert(person2.hasOwnProperty(‘name‘)); // false; 17 18 delete person1.name; 19 alert(person1.name); // "sam" ----来自原型 20 alert(person2.hasOwnProperty(‘name‘)); // true;
...........睡觉了- -明天再继续更新