国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務(wù)器之家 - 編程語言 - JavaScript - js教程 - 詳解js創(chuàng)建對(duì)象的幾種方式和對(duì)象方法

詳解js創(chuàng)建對(duì)象的幾種方式和對(duì)象方法

2022-01-24 16:53joychenke js教程

這篇文章主要介紹了詳解js創(chuàng)建對(duì)象的幾種方式和對(duì)象方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

這篇文章是看js紅寶書第8章,記的關(guān)于對(duì)象的筆記(第二篇)。

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

工廠模式:

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

?
1
2
3
4
5
6
7
function getObj(name, age) {
 let obj = {}
 obj.name = name
 obj.age = age
 return obj
}
let person1 = getObj("cc", 31)

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

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

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

?
1
2
3
4
5
6
7
8
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è)問題:

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

?
1
2
3
4
5
6
function CreateObj(name, age) {
 this.name = name
 this.age = age
}
CreateObj('cc', 10)
console.log(window.name) // 'cc'

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

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

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

?
1
2
3
4
5
6
7
8
9
10
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ì)讓自定義類型引用的代碼不能很好聚在一起。

原型模式:

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

?
1
2
3
4
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()

?
1
2
3
4
// isPrototypeOf判斷構(gòu)造函數(shù)的原型對(duì)象是否是實(shí)例的原型對(duì)象
function Person() {}
 let person1 = new Person()
 console.log(Person.prototype.isPrototypeOf(person1)); // true
?
1
2
3
4
// 獲取對(duì)象的原型對(duì)象
 function Person() {}
 let person1 = new Person()
 console.log(Object.getPrototypeOf(person1) === Person.prototype);
?
1
2
3
4
5
// 將某個(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
?
1
2
3
4
5
// 以某個(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)訪問一個(gè)對(duì)象person的name屬性時(shí),是按照以下步驟去訪問:
1,person上如果有name屬性(即便這個(gè)屬性是null,也會(huì)返回null),返回name屬性值;沒有,繼續(xù)去原型對(duì)象Person.prototype上找
2,如果原型上有name屬性,返回原型上name屬性值;沒有,則返回undefined

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

?
1
2
3
4
5
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操作符

?
1
2
3
4
5
6
// 對(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

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

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

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

?
1
2
3
4
5
6
7
8
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)于詳解js創(chuàng)建對(duì)象的幾種方式和對(duì)象方法的文章就介紹到這了,更多相關(guān)js創(chuàng)建對(duì)象內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://segmentfault.com/a/1190000039302326

延伸 · 閱讀

精彩推薦
  • js教程mustache.js實(shí)現(xiàn)首頁元件動(dòng)態(tài)渲染的示例代碼

    mustache.js實(shí)現(xiàn)首頁元件動(dòng)態(tài)渲染的示例代碼

    這篇文章主要介紹了mustache.js實(shí)現(xiàn)首頁元件動(dòng)態(tài)渲染的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可...

    code2roc4232021-12-21
  • js教程使用Typescript開發(fā)微信小程序的步驟詳解

    使用Typescript開發(fā)微信小程序的步驟詳解

    這篇文章主要介紹了使用Typescript開發(fā)微信小程序的步驟詳解,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考...

    陳希章6772021-12-30
  • js教程JS實(shí)現(xiàn)點(diǎn)擊掉落特效

    JS實(shí)現(xiàn)點(diǎn)擊掉落特效

    這篇文章主要介紹了JS實(shí)現(xiàn)點(diǎn)擊掉落特效,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下...

    小楊的旺仔沒有牛奶11772022-01-11
  • js教程Javascript實(shí)現(xiàn)漢字和拼音互轉(zhuǎn)的終極方案

    Javascript實(shí)現(xiàn)漢字和拼音互轉(zhuǎn)的終極方案

    網(wǎng)上關(guān)于JS實(shí)現(xiàn)漢字和拼音互轉(zhuǎn)的文章很多,但是比較雜亂,有的不支持多音字、不支持聲調(diào)或者字典文件太大,無法根據(jù)實(shí)際需要滿足需求。這篇文章給...

    我是小茗同學(xué)10352021-12-15
  • js教程原生js實(shí)現(xiàn)無縫輪播圖效果

    原生js實(shí)現(xiàn)無縫輪播圖效果

    這篇文章主要為大家詳細(xì)介紹了原生js實(shí)現(xiàn)無縫輪播圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    搬磚大法7372022-01-10
  • js教程javascript中l(wèi)ayim之查找好友查找群組

    javascript中l(wèi)ayim之查找好友查找群組

    這篇文章主要介紹了javascript中l(wèi)ayim之查找好友查找群組,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下...

    踮腳敲代碼9122022-01-19
  • js教程js實(shí)現(xiàn)拖拽拼圖游戲

    js實(shí)現(xiàn)拖拽拼圖游戲

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)拖拽拼圖游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    一個(gè)學(xué)前端的小菜鳥11572022-01-12
  • js教程微信小程序?qū)崿F(xiàn)簡單購物車功能

    微信小程序?qū)崿F(xiàn)簡單購物車功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)簡單購物車功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    mossbaoo5222021-12-22
主站蜘蛛池模板: 91人人 | a视频在线 | 一区二区亚洲 | 国产毛片毛片 | 国产亚洲一区二区精品 | 日韩免费在线 | 午夜在线视频播放 | 欧美黄色一区 | 亚洲精品国产第一综合99久久 | 色噜噜狠狠狠综合曰曰曰 | 欧美色综合天天久久综合精品 | 日韩爱爱免费视频 | 国产在线精品一区 | 欧美日韩精品一区二区在线观看 | 天堂一区| 国产精品videosex极品 | 久久久精品视频网站 | 国产韩国精品一区二区三区 | 精品少妇一区二区三区日产乱码 | 亚洲一区中文字幕在线观看 | av小说在线观看 | 久久精品在线 | 欧美黄色片免费观看 | 成人在线免费视频 | 欧美日韩亚洲国产精品 | 中文字幕一区二区三区乱码图片 | 日韩av免费在线观看 | 欧美日韩精品在线 | 欧美一级欧美三级在线观看 | 君岛美绪一区二区三区 | 日本亚洲最大的色成网站www | av一二| 久久国产区 | 黄毛片 | 国产亚洲欧美一区 | 亚洲一区二区三区在线视频 | 欧美疯狂性受xxxxx另类 | 超碰美女 | 亚洲国产精品一区二区三区 | 欧美日韩视频一区二区 | 人人澡人人射 |