摘要:直接通過(guò)構(gòu)造函數(shù)創(chuàng)建一個(gè)新對(duì)象。工廠模式優(yōu)點(diǎn)是可以解決創(chuàng)建多個(gè)相似對(duì)象的問(wèn)題,缺點(diǎn)是無(wú)法識(shí)別對(duì)象的類型。寄生構(gòu)造函數(shù)模式除了使用操作符,其他的和工廠函數(shù)一樣,可以為對(duì)象創(chuàng)建構(gòu)造函數(shù)。
new Object()
直接通過(guò)構(gòu)造函數(shù)創(chuàng)建一個(gè)新對(duì)象。
var obj = new Object() //等同于 var obj = {}
使用字面量的方式更簡(jiǎn)單,其實(shí)他倆是一樣的。
優(yōu)點(diǎn)是足夠簡(jiǎn)單,缺點(diǎn)是每個(gè)對(duì)象都是獨(dú)立的。
function createObj(name,age){ var obj = {}; obj.name=name; obj.age=age; return obj } var Anson = createObj("Anson", 18) console.log(Anson) //{name: "Anson", age: 18}
優(yōu)點(diǎn)是 可以解決創(chuàng)建多個(gè)相似對(duì)象的問(wèn)題,缺點(diǎn)是 無(wú)法識(shí)別對(duì)象的類型。
構(gòu)造函數(shù)function Person(name,age){ this.name =name; this.age=age; this.sayName =function (){ alert(this.name) } } var person = new Person("小明",13); console.log(person); //Person?{name: "小明", age: 13, sayName: ?}
優(yōu)點(diǎn)是 可以創(chuàng)建特定類型的對(duì)象,缺點(diǎn)是 多個(gè)實(shí)例重復(fù)創(chuàng)建方法
(構(gòu)造函數(shù)+原型)組合模式function Person(name, age){ this.name = name; this.age = age; Person.prototype.sayName = function (){ alert(this.name) } } var person = new Person("小白",18) console.log(person); //Person {name: "小白", age: 18} __proto__ -> sayName: ? ()
優(yōu)點(diǎn) 多個(gè)實(shí)例引用一個(gè)原型上的方法 比較常用
動(dòng)態(tài)原型function Person(name,age){ this.name=name this.age =age if(typeof this.sayName != "function"){ Person.prototype.sayName = function(){ alert(this.name) } } } var person = new Person("小紅",15) console.log(person); //Person?{name: "小紅", age: 15} 動(dòng)態(tài)創(chuàng)建sayName: ? ()
優(yōu)點(diǎn) 可以判斷某個(gè)方法是否有效,來(lái)決定是否需要初始化原型,if只會(huì)在僅在碰到第一個(gè)實(shí)例調(diào)用方法
時(shí)會(huì)執(zhí)行,此后所有實(shí)例共享此方法,需要注意的一點(diǎn)是,不能重新原型對(duì)象。
function Person(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayName=function(){ console.log(this.name) } return o; } var friend=new Person("her",18,"Front-end Engineer"); friend.sayName(); //her
除了使用new操作符,其他的和工廠函數(shù)一樣,可以為對(duì)象創(chuàng)建構(gòu)造函數(shù)。
穩(wěn)妥模式function Person(name, age){ var o={}; o.sayName=function(){ alert(name) } return o; } var person = ("小亮",24); person.sayName();//’小亮‘
除了使用person.sayName()之外 ,沒(méi)有辦法在訪問(wèn)到name的值,適合在某些安全執(zhí)行環(huán)景下使用。
Object.create()const person = { isHuman: false, printIntroduction: function () { console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`); } }; const me = Object.create(person); me.name = "Matthew"; // "name" is a property set on "me", but not on "person" me.isHuman = true; // inherited properties can be overwritten me.printIntroduction(); // expected output: "My name is Matthew. Am I human? true"
傳入一個(gè)原型對(duì)象,創(chuàng)建一個(gè)新對(duì)象,使用現(xiàn)有的對(duì)象來(lái)提供新創(chuàng)建的對(duì)象的__proto__,實(shí)現(xiàn)繼承。
參考:《JavaScript高級(jí)程序設(shè)計(jì)第三版》、MDN
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/104283.html
摘要:前端面試每日題,以面試題來(lái)驅(qū)動(dòng)學(xué)習(xí),每天進(jìn)步一點(diǎn)讓努力成為一種習(xí)慣,讓奮斗成為一種享受相信堅(jiān)持的力量項(xiàng)目地址推薦歡迎跟一起折騰前端,系統(tǒng)整理前端知識(shí),目前正在折騰,打算打通算法與數(shù)據(jù)結(jié)構(gòu)的任督二脈。 《論語(yǔ)》,曾子曰:吾日三省吾身(我每天多次反省自己)。 前端面試每日3+1題,以面試題來(lái)驅(qū)動(dòng)學(xué)習(xí),每天進(jìn)步一點(diǎn)! 讓努力成為一種習(xí)慣,讓奮斗成為一種享受!相信 堅(jiān)持 的力量!??! 項(xiàng)目...
摘要:前端面試每日題,以面試題來(lái)驅(qū)動(dòng)學(xué)習(xí),每天進(jìn)步一點(diǎn)讓努力成為一種習(xí)慣,讓奮斗成為一種享受相信堅(jiān)持的力量項(xiàng)目地址推薦歡迎跟一起折騰前端,系統(tǒng)整理前端知識(shí),目前正在折騰,打算打通算法與數(shù)據(jù)結(jié)構(gòu)的任督二脈。 《論語(yǔ)》,曾子曰:吾日三省吾身(我每天多次反省自己)。 前端面試每日3+1題,以面試題來(lái)驅(qū)動(dòng)學(xué)習(xí),每天進(jìn)步一點(diǎn)! 讓努力成為一種習(xí)慣,讓奮斗成為一種享受!相信 堅(jiān)持 的力量?。?! 項(xiàng)目...
摘要:以下為大家整理了阿里巴巴史上最全的面試題,涉及大量面試知識(shí)點(diǎn)和相關(guān)試題。的內(nèi)存結(jié)構(gòu),和比例。多線程多線程的幾種實(shí)現(xiàn)方式,什么是線程安全。點(diǎn)擊這里有一套答案版的多線程試題。線上系統(tǒng)突然變得異常緩慢,你如何查找問(wèn)題。 以下為大家整理了阿里巴巴史上最全的 Java 面試題,涉及大量 Java 面試知識(shí)點(diǎn)和相關(guān)試題。 JAVA基礎(chǔ) JAVA中的幾種基本數(shù)據(jù)類型是什么,各自占用多少字節(jié)。 S...
摘要:希望大家在這浮夸的前端圈里,保持冷靜,堅(jiān)持每天花分鐘來(lái)學(xué)習(xí)與思考。 今天的React題沒(méi)有太多的故事…… 半個(gè)月前出了248個(gè)Vue的知識(shí)點(diǎn),受到很多朋友的關(guān)注,都強(qiáng)烈要求再出多些React相前的面試題,受到大家的邀請(qǐng),我又找了20多個(gè)React的使用者,他們給出了328道React的面試題,由我整理好發(fā)給大家,同時(shí)發(fā)布在了前端面試每日3+1的React專題,希望對(duì)大家有所幫助,同時(shí)大...
摘要:雖然今年沒(méi)有換工作的打算但為了跟上時(shí)代的腳步還是忍不住整理了一份最新前端知識(shí)點(diǎn)知識(shí)點(diǎn)匯總新特性,語(yǔ)義化瀏覽器的標(biāo)準(zhǔn)模式和怪異模式和的區(qū)別使用的好處標(biāo)簽廢棄的標(biāo)簽,和一些定位寫法放置位置和原因什么是漸進(jìn)式渲染模板語(yǔ)言原理盒模型,新特性,偽 雖然今年沒(méi)有換工作的打算 但為了跟上時(shí)代的腳步 還是忍不住整理了一份最新前端知識(shí)點(diǎn) 知識(shí)點(diǎn)匯總1.HTMLHTML5新特性,語(yǔ)義化瀏覽器的標(biāo)準(zhǔn)模式和怪...
閱讀 2434·2023-04-26 00:46
閱讀 596·2023-04-25 21:36
閱讀 739·2021-11-24 10:19
閱讀 2284·2021-11-23 09:51
閱讀 1029·2021-10-21 09:39
閱讀 845·2021-09-22 10:02
閱讀 1679·2021-09-03 10:29
閱讀 2710·2019-08-30 15:53