1. 程式人生 > >重寫原型物件(prototype)

重寫原型物件(prototype)

重寫後constructor屬性的變化以及處理


//建立一個Parent例項
function Parent() {
    this.name = "wgh";
}
//重寫Parent的原型物件,併為其手動新增constructor屬性,注意在ECMAScript5中預設的constructor是不可列舉的,但是我們手動設定的是可以列舉的,如果要處理的話我們可以通過Object.definePrototype()方法來設定

Parent.prototype={
    constructor:Parent,
    age:23,
    name:"王光輝",
    sayAge:function
() {
console.log(this.age); }, sex:"男" }; let p1 = new Parent();

檢測重寫的原型物件constructor屬性的可列舉性

Object.keys(Parent.prototype);
//["constructor", "age", "name", "sayAge", "sex"]

Object.definePrototype()方法來對列舉性進行處理

Object.defineProperty(Parent.prototype,"constructor",{
    enumerable:false
, value:Parent });

再次檢測

Object.keys(Parent.prototype);
//["age", "name", "sayAge", "sex"]

原型的呼叫問題

重寫原型物件切斷了現有原型和任何之前已經存在例項之間的關係;他們應用的仍是最初的原型。

function Parent() {
    this.name = "wgh";
}
//注意我們在這裡建立了一個例項p2
var p2=new Parent();
//重寫原型物件
Parent.prototype={
    constructor:Parent,
    age:23
, name:"王光輝", sayAge:function () { console.log(this.age); }, sex:"男" }; p2.sayAge();//p2.sayAge is not a function