JavaScript简单重写构造器的原型
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                JavaScript简单重写构造器的原型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                ?
1 //簡單重寫原型對象: 2 3 //一個構造函數Person 4 function Person(){ 5 6 } 7 //重寫Person的原型 8 //把Person的原型賦值給一個新的對象 是我們重寫的過程 9 Person.prototype={ 10 // 對于構造器 如果我們不給他寫,則構造器就是Object的構造器了 11 constructor:Person, //加上構造器屬性 這里有一點問題 因為構造器屬性是不可枚舉的,這里無法設置 12 name:"張三", 13 sayName:function(){ 14 alert(this.name); 15 } 16 }; 17 18 var p1 = new Person(); 19 alert(Person.prototype.constructor); 20 21 /* 22 以上我們認為模擬重寫了一個構造函數的原型 23 但是有很多問題。構造器是不可枚舉的,在這里我們無法實現不可枚舉屬性。 24 25 在js中提供Object.defineProperty(對象,屬性,配置) 來實現設置屬性的一些性質 26 重寫一個原型就可以這樣實現: 27 * */ 28 Object.defineProperty( 29 Person.prototype , //要配置的對象 30 "constructor", //配置對象的構造器 構造器 31 { //構造器的特性 32 enumerable :false, //構造器 不可枚舉 33 value : Person //構造器的值是Person 34 } 35 ); 36 // 通過以上方式重寫 就把構造器設置成不可枚舉了 37 var p2 = new Person(); 38 for(attr in p2){ 39 alert(attr); 40 } 41 42 /* 43 注意:由于語言的動態性 44 45 在實例化對象之后 如果給原型添加屬性或方法,實際上實例對象是能調用后添加的屬性和方法 46 實例化之后 重寫原型,實際上實例的原型還是指向原來的原型對象 不是新的原型對象 47 */ 48 function Person(){ 49 50 } 51 var p1 = new Person(); 52 Person.prototype.name="哈哈"; 53 alert(p1.name); //哈哈 因為p1的原型引用調用之前已經添加屬性 可以使用 54 55 var p2 = new Person(); 56 Person.prototype = { 57 constructor : Person, 58 name:"xixi" 59 }; 60 alert(p2.name); //哈哈,實例對象之后改變構造器的原型,實例的對象的原型還指向原來的 61 62 var p3 = new Person(); 63 alert(p3.name); //xixi 因為這是在改變構造器原型之后的實例對象
?
轉載于:https://www.cnblogs.com/Lin-Yi/p/7439987.html
總結
以上是生活随笔為你收集整理的JavaScript简单重写构造器的原型的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        