对象(三)
1、原型的弊端
function Person() {}Person.prototype = {constructor : Person,name : 'zs',age : 20,friends : ['王五','趙六']}var p1 = new Person();var p2 = new Person();p2.friends.push("xiao A");alert(p1.friends); // 王五,趙六,xiao Aalert(p2.friends); // 王五,趙六,xiao A// 原型的屬性和方法被所有的對象所共享改進方法一? :?
2、組合原型和構造函數式
function Person2(name, age, friends) {this.name = name;this.age = age;this.friends = friends;}Person2.prototype = {constructor : Person2,sayName : function () {alert(this.name);}}var p3 = new Person2("張三",20,["王五","趙六"]);var p4 = new Person2("李四",26,["王五","趙六","淺淺"])alert(p3.friends) // 王五,趙六p3.sayName(); // 張三alert(p4.friends) // 王五,趙六,淺淺p4.sayName(); // 李四3、動態原型模式
// 動態原型模式 (將代碼都封裝到一起) function Person3(name,age,friends) {this.name = name;this.age = age;this.friends = friends;if(typeof this.sayName != "function" ){Person3.prototype.sayName = function () {alert(this.name)}}}var p5 = new Person3("haha",20,['aa','bb']);var p6 = new Person3("heihei",22,['aa','bb','cc']);alert(p5.sayName == p6.sayName) // true 說明 sayName 方法只被聲明了一次4、穩妥構造函數式
// 穩妥構造函數式 (應用在非常安全的環境中)// 1、沒有公共屬性 2、不能使用 this 對象 function Person4(name,age,job) {// 創建一個要返回的對象發var obj = new Object();// 創建一些屬性,屬性為私有屬性,函數外不能訪問var name = name;obj.sayName = function () { // 函數里定義方法來訪問函數內的屬性 alert(name);}return obj;}var p7 = new Person4("aa");p7.sayName(); // aa?
轉載于:https://www.cnblogs.com/debra/p/7804500.html
總結
- 上一篇: 奇偶排序
- 下一篇: merge into语句的使用