91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在JavaScript中創建對象的方式有哪些

發布時間:2021-03-01 14:36:20 來源:億速云 閱讀:173 作者:戴恩恩 欄目:開發技術

這篇文章主要介紹了在JavaScript中創建對象的方式有哪些,此處通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考價值,需要的朋友可以參考下:

JavaScript的特點

1.JavaScript主要用來向HTML頁面添加交互行為。 2.JavaScript可以直接嵌入到HTML頁面,但寫成單獨的js文件有利于結構和行為的分離。 3.JavaScript具有跨平臺特性,在絕大多數瀏覽器的支持下,可以在多種平臺下運行。

創建對象的幾種模式:

工廠模式:

工廠是函數的意思。工廠模式核心是定義一個返回全新對象的函數。

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

缺點:不知道新創建的對象是什么類型

構造函數模式:

通過一個構造函數,得到一個對象實例。
構造函數和工廠模式區別是:
1,構造函數函數體加了this
2,構造函數沒有return
3,構造函數調用時,用new關鍵字

 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

關于構造函數的兩個問題:

1,構造函數和普通函數唯一區別是調用方式。構造函數要用new關鍵字。如果不用new,則是往Global對象上加屬性。下面例子中,CreateObj方法,往window對象上加了name和age屬性

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

2,構造函數存在的問題: 構造函數體內的方法,每次創建一個實例,都會創建一遍。

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()

但是,這樣會讓自定義類型引用的代碼不能很好聚在一起。

原型模式:

原理是,每個函數都有一個prototype屬性。prototype是一個對象,里面定義的屬性和方法會被所有實例共享。
關于原型模式,有兩個等式:

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

關于原型對象的三個方法:isPrototype , getPrototypeof,setPrototypeOf, Object.create()

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

當訪問一個對象person的name屬性時,是按照以下步驟去訪問:
1,person上如果有name屬性(即便這個屬性是null,也會返回null),返回name屬性值;沒有,繼續去原型對象Person.prototype上找
2,如果原型上有name屬性,返回原型上name屬性值;沒有,則返回undefined

判斷一個屬性是在實例上,還是在原型上,可以用hasOwnProperty

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

判斷一個對象上是否有個某個屬性,用in操作符

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

訪問對象的屬性的方法:

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

其他訪問對象屬性和屬性值的方法:
Object.values( ) 對象值組成的數組,會省掉Symbol型。
Object.entries( ) 對象鍵值對組成的數組,會將鍵,轉化成字符串,省掉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 ] ]

到此這篇關于在JavaScript中創建對象的方式有哪些的文章就介紹到這了,更多相關在JavaScript中創建對象的方式有哪些的內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

六安市| 崇州市| 正宁县| 花莲市| 丘北县| 孟津县| 武安市| 望奎县| 藁城市| 沂南县| 九龙城区| 湄潭县| 沈丘县| 星子县| 堆龙德庆县| 冷水江市| 怀安县| 浦东新区| 琼海市| 冕宁县| 容城县| 黎城县| 公主岭市| 临朐县| 宁陕县| 平江县| 阳信县| 安化县| 恩平市| 花垣县| 通化县| 伊通| 福贡县| 长泰县| 榆中县| 三原县| 佛山市| 布尔津县| 荆州市| 隆德县| 巢湖市|