JavaScript中關(guān)于Object.create()的用法
JavaScript的Object.create()方法
ES5定義了一個(gè)名為Object.create()的方法,它創(chuàng)建一個(gè)對(duì)象,其中第一個(gè)參數(shù)就是這個(gè)對(duì)象的原型,Object.create()提供第二個(gè)可選參數(shù),用以對(duì)對(duì)象的屬性進(jìn)行進(jìn)一步描述。
// Object.create()是一個(gè)靜態(tài)方法 // 以下展示不同參數(shù)的用法 // 一個(gè)參數(shù) var o = Object.create(null) // 相當(dāng)于空對(duì)象,任何屬性都沒(méi)有 var o = Object.create(Object.prototype) // 相當(dāng)于var o = {} var o = Object.create({x: 1, y: 2}) // 相當(dāng)于var o = {}; o.prototype = {x: 1, y: 2} // 第二個(gè)參數(shù)是一個(gè)對(duì)象,用于給創(chuàng)建的對(duì)象添加屬性和屬性描述的 // 屬性又分為數(shù)據(jù)屬性和存取器屬性 // 數(shù)據(jù)屬性的描述符對(duì)象的屬性有value(值)、writable(可寫性)、enumerable(可枚舉性)、configurable(可配置性) // 存取器屬性的描述符對(duì)象的屬性有g(shù)et(讀取)、set(寫入)、enumerable(可枚舉性)、configurable(可配置性) // 兩個(gè)參數(shù) var o = Object.create({x: 1, y: 2}, { a: { value: 100, ...... } }) // 向創(chuàng)建的對(duì)象o添加一個(gè)數(shù)據(jù)屬性a,值為100,其它描述屬性默認(rèn)為false var o = Object.create({x: 1, y: 2}, { a: { get() { return this.x + this.y }, ...... } }) // 向創(chuàng)建的對(duì)象o添加一個(gè)存取器屬性a,o.a時(shí)執(zhí)行其get方法,set屬性默認(rèn)為undefined,其余描述屬性默認(rèn)為false
JavaScript手寫Object.create函數(shù)
給大家分享一下手寫 Object.create 函數(shù)。
函數(shù)功能
Object.create()方法創(chuàng)建一個(gè)新對(duì)象,使用現(xiàn)有的對(duì)象來(lái)提供新創(chuàng)建的對(duì)象的__proto__
代碼:
function create(parentPrototype, props) { ? function Fn() { ? ? } ? Fn.prototype = parentPrototype; ? let fn = new Fn(); ? for (let key in props) { ? ? Object.defineProperty(fn, key, { ? ? ? enumerable: true, // 如果不枚舉對(duì)象中無(wú)法查看到這個(gè)對(duì)象 ? ? ? ...props[key] ? ? }) ? } ? return fn } ? ? function Parent() { ? this.name = "parent"; } ? Parent.prototype.eat = function () { ? console.log("eat"); }; ? function Child() { ? this.age = 9; ? Parent.call(this); } ? Child.prototype = create(Parent.prototype, { constructor: { value: Child } }); ? // { constructor: { value: Child } } ?這段代碼保證 Child 的 prototype 的 constructor 還指向 Child 的構(gòu)造函數(shù) ? let child = new Child(); console.log(child.constructor,'constructor'); // [Function: Child] 'constructor' child.eat() // eat
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
javascript實(shí)現(xiàn)二叉樹(shù)的代碼
本篇文章主要介紹了javascript實(shí)現(xiàn)二叉樹(shù)的代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06根據(jù)判斷瀏覽器類型屏幕分辨率自動(dòng)調(diào)用不同CSS的代碼
根據(jù)判斷瀏覽器類型屏幕分辨率自動(dòng)調(diào)用不同CSS的代碼...2007-02-02HTML5canvas 繪制一個(gè)圓環(huán)形的進(jìn)度表示實(shí)例
這篇文章主要介紹了HTML5canvas繪制一個(gè)圓環(huán)形的進(jìn)度表示實(shí)例的相關(guān)資料,需要的朋友可以參考下2016-12-12Javascript計(jì)算二維數(shù)組重復(fù)值示例代碼
這篇文章主要給大家介紹了利用Javascript計(jì)算二維數(shù)組重復(fù)值的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。2016-12-12JavaScript定時(shí)器實(shí)現(xiàn)無(wú)縫滾動(dòng)圖片
這篇文章主要為大家詳細(xì)介紹了JavaScript定時(shí)器實(shí)現(xiàn)無(wú)縫滾動(dòng)圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05javascript中bind函數(shù)的作用實(shí)例介紹
bind()的方法在ie,6,7,8中不適用,需要擴(kuò)展通過(guò)擴(kuò)展Function prototype可以實(shí)現(xiàn)此方法,下面為大家介紹下javascript中bind函數(shù)的作用2014-09-09