在JavaScript中創(chuàng)建對(duì)象的方式有哪些-創(chuàng)新互聯(lián)

這篇文章主要介紹了在JavaScript中創(chuàng)建對(duì)象的方式有哪些,此處通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考價(jià)值,需要的朋友可以參考下:

為高陵等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及高陵網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站制作、成都網(wǎng)站建設(shè)、高陵網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

JavaScript的特點(diǎn)

1.JavaScript主要用來(lái)向HTML頁(yè)面添加交互行為。 2.JavaScript可以直接嵌入到HTML頁(yè)面,但寫(xiě)成單獨(dú)的js文件有利于結(jié)構(gòu)和行為的分離。 3.JavaScript具有跨平臺(tái)特性,在絕大多數(shù)瀏覽器的支持下,可以在多種平臺(tái)下運(yùn)行。

創(chuàng)建對(duì)象的幾種模式:


工廠模式:

工廠是函數(shù)的意思。工廠模式核心是定義一個(gè)返回全新對(duì)象的函數(shù)。

 function getObj(name, age) {
  let obj = {}
  obj.name = name
  obj.age = age
  return obj
 }
 let person1 = getObj("cc", 31)

缺點(diǎn):不知道新創(chuàng)建的對(duì)象是什么類(lèi)型

構(gòu)造函數(shù)模式:

通過(guò)一個(gè)構(gòu)造函數(shù),得到一個(gè)對(duì)象實(shí)例。
構(gòu)造函數(shù)和工廠模式區(qū)別是:
1,構(gòu)造函數(shù)函數(shù)體加了this
2,構(gòu)造函數(shù)沒(méi)有return
3,構(gòu)造函數(shù)調(diào)用時(shí),用new關(guān)鍵字

 function CreateObj(name, age) {
  this.name = name
  this.age = age
 }
 let person1 = new CreateObj("cc", 31)
 console.log(person1)
 console.log(person1.constructor === CreateObj); // true
 console.log(person1 instanceof CreateObj); // true

關(guān)于構(gòu)造函數(shù)的兩個(gè)問(wèn)題:


1,構(gòu)造函數(shù)和普通函數(shù)區(qū)別是調(diào)用方式。構(gòu)造函數(shù)要用new關(guān)鍵字。如果不用new,則是往Global對(duì)象上加屬性。下面例子中,CreateObj方法,往window對(duì)象上加了name和age屬性

 function CreateObj(name, age) {
  this.name = name
  this.age = age
 }
 CreateObj('cc', 10)
 console.log(window.name) // 'cc'

2,構(gòu)造函數(shù)存在的問(wèn)題: 構(gòu)造函數(shù)體內(nèi)的方法,每次創(chuàng)建一個(gè)實(shí)例,都會(huì)創(chuàng)建一遍。

person1.sayName( ) === person2.sayName( ) // false

解決方法是,將sayName定義在createObj外面。

 function sayName() {
  console.log(this.name)
 }
 function CreatePerson(name, age) {
  this.name = name
  this.age = age
  this.sayName = sayName
 }
 let person1 = new CreatePerson('joy', 31)
 person1.sayName()

但是,這樣會(huì)讓自定義類(lèi)型引用的代碼不能很好聚在一起。

原型模式:

原理是,每個(gè)函數(shù)都有一個(gè)prototype屬性。prototype是一個(gè)對(duì)象,里面定義的屬性和方法會(huì)被所有實(shí)例共享。
關(guān)于原型模式,有兩個(gè)等式:

 function Person() { }
 let person1 = new Person()
 console.log(person1.__proto__ === Person.prototype)  // true
 console.log(Person.prototype.constructor === Person); // true

關(guān)于原型對(duì)象的三個(gè)方法:isPrototype , getPrototypeof,setPrototypeOf, Object.create()

// isPrototypeOf判斷構(gòu)造函數(shù)的原型對(duì)象是否是實(shí)例的原型對(duì)象
function Person() {}
 let person1 = new Person()
 console.log(Person.prototype.isPrototypeOf(person1)); // true
// 獲取對(duì)象的原型對(duì)象
 function Person() {}
 let person1 = new Person()
 console.log(Object.getPrototypeOf(person1) === Person.prototype);
// 將某個(gè)對(duì)象,設(shè)為另一個(gè)對(duì)象的原型對(duì)象
 let person1 = {name: "cc"}
 let person2 = {age: 32}
 Object.setPrototypeOf(person1,person2)
 console.log(person1.name, person1.age); // cc 32
// 以某個(gè)對(duì)象為原型對(duì)象,創(chuàng)建一個(gè)新對(duì)象  
let person1 = {name: "cc"}
 let person2 = Object.create(person1)
 person2.age = 30
 console.log(person2.name, person2.age);

當(dāng)訪問(wèn)一個(gè)對(duì)象person的name屬性時(shí),是按照以下步驟去訪問(wèn):
1,person上如果有name屬性(即便這個(gè)屬性是null,也會(huì)返回null),返回name屬性值;沒(méi)有,繼續(xù)去原型對(duì)象Person.prototype上找
2,如果原型上有name屬性,返回原型上name屬性值;沒(méi)有,則返回undefined

判斷一個(gè)屬性是在實(shí)例上,還是在原型上,可以用hasOwnProperty

 function Person() {}
 Person.prototype.name = "cc"
 let person1 = new Person()
 console.log(person1.name) // 'cc'
 console.log(person1.hasOwnProperty("name")); // false

判斷一個(gè)對(duì)象上是否有個(gè)某個(gè)屬性,用in操作符

// 對(duì)象自身 or 原型上找到,都返回true 
function Person() {}
 Person.prototype.name = "cc"
 let person1 = new Person()
 console.log("name" in person1) // true
 console.log(person1.hasOwnProperty("name")); // false

訪問(wèn)對(duì)象的屬性的方法:

Object.keys( )
for ... in // 繼承屬性也會(huì)遍歷出來(lái)
Object.getOwnPropertyNames(obj) // 會(huì)列出可枚舉和不可枚舉屬性,其他和 Object.keys( )結(jié)果一樣
Object.getOwnPropertySymbols(obj) // 和getOwnPropertyNames類(lèi)似,只是僅針對(duì)symbol
Reflect.ownKeys(obj) // 和Object.keys( )結(jié)果一樣

其他訪問(wèn)對(duì)象屬性和屬性值的方法:
Object.values( ) 對(duì)象值組成的數(shù)組,會(huì)省掉Symbol型。
Object.entries( ) 對(duì)象鍵值對(duì)組成的數(shù)組,會(huì)將鍵,轉(zhuǎn)化成字符串,省掉Symbol型。

 function Person() {}
 Person.prototype.name = "cc"
 let person = new Person()
 person.age = 21
 let sy = Symbol('sy')
 person[sy] = 'smile'
 console.log(Object.values(person)) // [ 21 ]
 console.log(Object.entries(person)) // [ [ 'age', 21 ] ]

到此這篇關(guān)于在JavaScript中創(chuàng)建對(duì)象的方式有哪些的文章就介紹到這了,更多相關(guān)在JavaScript中創(chuàng)建對(duì)象的方式有哪些的內(nèi)容請(qǐng)搜索創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,!

本文題目:在JavaScript中創(chuàng)建對(duì)象的方式有哪些-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://muchs.cn/article28/coipcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航標(biāo)簽優(yōu)化搜索引擎優(yōu)化、網(wǎng)站設(shè)計(jì)網(wǎng)站導(dǎo)航、網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站