那些年成為node攻城獅的路(六)

wh7577發表於2021-09-09

物件

  • 屬性

  • 資料屬性
    存在四個描述符:configurable(是否可以透過delete刪除)、emunerable(是否可列舉)、writeable(是否可修改屬性的值)、value(具體的值)

var person={age:20};//age屬性writeable、configurable、enumerable(預設全為true)Object.defineProperty(person,'name',{//那麼屬性 writeable、configurable、enumerable(預設全為false)value :'Lyf'})//--->由此所構建出來的物件name屬性不可修改、刪除、和列舉,不允許呼叫defineProperty;age屬性可以刪除、修改、列舉、可以多次呼叫defineProperty。console.log(person);//{age:20}person.name='Mx';
person.age=22;console.log(person);//{age:22}console.log(person.name);//Lyf
  • 訪問器屬性
    存在四個描述符:configurable、enumerable、get(寫入時呼叫)、set(讀取時呼叫)

var book ={_year:2004,edition:1}//_約定只能透過物件方法訪問,描述符預設全為trueObject.defineProperty(book,'year',{    enumerable:true,//預設描述符全為false
    get:function(){        return this._year;
    },    set :function(value){        this._year=value;        this.edition++
    }
});
book.year=2016;console.log(book)
  • 一次定義多個屬性

Object.defineProperties(book,{name:{writable:true,value:'Lyf'}
age:{get:function(){}}
})
  • 讀取屬性特性
    Object.getOwnPropertyDescriptor(物件,屬性);

  • 原型prototype

function Person(){this.name;
}
Person.prototype.sayName=function(){ console.log(this.name);
}var p1=new Person('Lyf');

圖片描述

原型-建構函式-例項.png

建構函式.prototype=原型物件
例項.protot=原型物件
原型物件.constructor=建構函式

var p1=new Person();
==>var p1={};
p1.__proto__=Person.prototype;
Person.call(p1);
  • 原型鏈,原型中的方法被所有例項所共享,尋找共有方法或屬性時採取就近原則

F1.prototype=F2; F2.prototype=F3;
F1.prototype.constructor=F1;    F2.prototype.constructor=F2;

hasOwnPrototype(name);返回true表明該name屬於例項物件,返回false則表明該例項屬於原型物件。



作者:我就是L
連結:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2480/viewspace-2802683/,如需轉載,請註明出處,否則將追究法律責任。

相關文章