一切皆可對象:使用JavaScript創建對象的三種方法

2020-12-14 讀芯術

全文共1990字,預計學習時長11分鐘

圖源:unsplash

Javascript中的一切幾乎都是對象,無論是數組還是函數。本文將教你使用JavaScript創建對象的三種方法。

對象字面量

JavaScript對象字面量是指用大括號括起來的用逗號分隔的名稱——值對列表。對象字面量用於封裝代碼並將其包裝在有序的包中。

let Person = {

name: "Foziya",

age: 20,

action: ["walk", " run"],

greeting: function() {

console.log("Hello");

}

};

對象字面量的屬性值可以是任何數據類型,包括數組字面量、函數字面量和嵌套對象字面量。

let shape = {

name: "rectangle",

color: "red",

size: {

length: 10,

breadth: 20

}

};

console.log(shape);

// { name:'rectangle',

// color: 'red',

// size: { length:10, breadth: 20 } }

console.log(shape.size.length)

// 10

簡寫屬性名稱

假設必須將不同的變量放在一個對象內,有一種方法是:

let one = 1;

let two = 2;

let three = 3;

let numbers = {

one: one,

two: two,

three: three

};

console.log(numbers);

//{ one: 1, two: 2, three: 3 }

使用ECMAScript 2015,可通過較短的表示法實現相同的目的:

let one = 1;

let two = 2;

let three = 3;

let numbers = { one, two, three };

console.log(numbers);

//{ one: 1, two: 2, three: 3 }

console.log(numbers.one)

// 1

console.log(numbers.one === { one }.one);

// true

用戶定義的構造函數

你也可以使用函數在JavaScript中創建對象。仔細想,其實它們本身已經是對象了,因此對象用於創建更多對象。

通常,此方法優於對象構造函數。試想必須創建數百個具有相同屬性的對象,使用對象構造函數方法,必須手動將所有屬性添加到所有對象,但是使用構造函數可以預定義這些屬性。

functionmovies(name, releaseYear, genre, ratings) {

this.name = name;

this.releaseYear =releaseYear;

this.genre = genre;

this.ratings =ratings;

this.watch = () => {

console.log("WatchOnline");

};

}

let DPS = new movies("Dead Poets Society", 1989, ["Drama", "Teen"], {

IMDb: "8.1 /10",

Metacritic: "79%"

});

console.log(DPS);movies {

// name: 'Dead Poets Society',

// releaseYear: 1989,

// genre: ['Drama','Teen'],

// ratings: { IMDb:'8.1 / 10', Metacritic: '79%' },

// watch: [Function]

// }

let rocky = new movies("Rocky", 1976, ["Drama", "Sports"], {

IMDb: "8.1 /10",

Metacritic: "70%"

});

console.log(rocky);

// movies {

// name: 'Rocky',

// releaseYear: 1976,

// genre: ['Drama','Sports'],

// ratings: { IMDb:'8.1 / 10', Metacritic: '70%' },

// watch: [Function]

// }

使用相同的構造函數,可以創建任意數量的對象。

重複的屬性名稱

如果兩個屬性使用相同的名稱,則第二個屬性將覆蓋第一個屬性。

let Person = {

name: "NeyVatsa",

name: "Shashank"

};

console.log(Person.name);

// Shashank

New關鍵字

對象構造函數為給定值創建一個對象封裝器。如果該值不存在或未定義,它將創建並返回至一個空對象。否則的話,它將返回至一個與給定值類型一致的對象。

也可以使用new關鍵字創建對象。使用Javascript中的內置對象構造函數,創建一個新的空對象;或者,此關鍵字可以與用戶定義的構造函數一起使用。首先來看一個例子:

let movies = newObject();

console.log(movies)

//{}

下一步是向此空對象添加屬性和方法,可通過簡單的點標記來實現:

let movies = newObject();

console.log(movies)

//{}

movies.name = "Dead Poets Society";

movies.releaseYear = 1989;

movies.genre = ["Drama", "Teen"];

movies.ratings = {

IMDb: "8.1 /10",

Metacritic: "79%"

};

movies.watch = () => {

console.log("WatchOnline");

};

console.log(movies);

// { name: 'Dead Poets Society',

// releaseYear: 1989,

// genre: [ 'Drama', 'Teen' ],

// ratings: { IMDb: '8.1 / 10',Metacritic: '79%' },

// watch: [Function] }

movies.watch();

// Watch Online

但我不建議這種做法,因為後臺有作用域解析,可以檢查構造函數是內置的還是用戶定義的。

使用ES6類創建對象

此方法與通過用戶定義的構造函數使用new關鍵字非常類似。類是面向對象編程(OOP)的主要組件,可以創建實際上是對象的許多類實例。在ES6規範的支持下,現在可以用類替換構造函數。

classMovies {

constructor(name,releaseYear, genre, ratings) {

this.name = name;

this.releaseYear = releaseYear;

this.genre = genre;

this.ratings =ratings;

}

watch() {

console.log("WatchOnline");

}

}

let rocky = new Movies("Rocky", 1976, ["Drama", "Sports"], {

IMDb: "8.1 /10",

Metacritic: "70%"

});

console.log(rocky);

// Movies {

// name: 'Rocky',

// releaseYear: 1976,

// genre: ['Drama','Sports'],

// ratings: { IMDb:'8.1 / 10', Metacritic: '70%' }

// }

rocky.watch();

//Watch Online

上面示例中,我已經定義了構造函數中的所有參數。方法可以是類的一部分,而聲明可以稍後添加到類的創建實例中,成為「對象」:

/*

above example

*/

rocky.buy = function() {

console.log("Buy theMovie");

};

rocky.buy();

// Buy the Movie

而這裡方法是對象的一部分,不會影響原始類。

圖源:unsplash

在JavaScript這一基於原型的繼承語言中,類和構造函數都模仿面向對象的繼承模型。熟悉類非常有幫助,React這樣的流行JavaScript庫會經常使用類句法。

你掌握了嗎?

留言點讚關注

我們一起分享AI學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範

相關焦點

  • 什麼是JavaScript對象?如何創建並引用?這就告訴你!
    二、對象的創建(重點)2.1怎樣創建對象語法:var obj = { key : value };上面代碼定義了一個對象,它被賦值給變量obj。2.3 創建對象a.直接使用大括號創建對象b.使用new命令生成一個Object對象的實例c.使用Object.create方法創建對象var obj1 = {};
  • JavaScript-window對象常用屬性及方法有哪些?
    對象,瀏覽器訪問歷史信息;在瀏覽器中,window對象有雙重角色,它既是通過javascript訪問瀏覽器窗口的一個接口,又是ECMAScript規定的Global對象。所有 JavaScript 全局對象、函數以及變量均自動成為 window 對象的成員。全局變量是 window 對象的屬性。全局函數是 window 對象的方法。
  • JavaScript:對象都是這樣生成的!
    頭圖 | CSDN下載自視覺中國作者 | flydean 責編 | 張文來源 | 程序那些事(ID:flydean-tech)本文將會深入講解面向對象在 javascript 中的應用,並詳細介紹三種對象的生成方式:構造函數、原型鏈、類。
  • EffectiveJava-1-創建和銷毀對象
    使用靜態工廠方法代替構造器1. 一個類對外提供獲取自身實例對象的方法:- 提供公有構造器;- 公有的靜態工廠方法(一個返回當前類實例的靜態方法,包括當不限於我們平時所寫的單例);2. 靜態工廠方法的優勢 :a.
  • 第六篇:DOM對象與Document
    DOM對象概述DOM是一套Web標準,它定義了訪問HTML文檔對象的一套屬性、方法和事件,DOM實際上是建立網頁與JavaScript語言溝通的橋梁。Document對象結構如下圖所示:瀏覽器在解析HTML文檔時,若遇到<body>標籤和<frame>,會自動創建Window對象,Windos對象是DOM對象模型中最頂層的對象,通過Windos對象可以獲取Document對象。
  • String對象的內存分配
    String對象有三種創建方式:第一種方式是直接通過賦值語句,將字符串賦值給String類型的變量。例如:String str = new String(「Hello」);第三種方式是通過String對象的intern()方法返回一個String對象的引用。
  • JavaScript-正則表達式中的修飾符和對象有哪些?
    ;var first_index = str.search(/frank/i);console.log(first_index);1.3.2 match方法match() 方法可在字符串內檢索指定的值,或找到一個或多個正則表達式的匹配。
  • java創建對象的過程詳解(從內存角度分析)
    java對象的創建操作其實我在《JVM系列之類的加載機制》一文曾經提到過,包含兩個過程:類的初始化和實例化。為此為了理解的深入,我們還需要再來看一下類的生命周期。一張圖表示:從上面我們可以看到,對象的創建其實包含了初始化和使用兩個階段。有了這個印象之後,我們就能開始今天的文章了。
  • ES6中的Promise對象到底如何使用?
    JavaScript本身是一種單線程程式語言,不支持多線程,所以,很多時候,需要使用異步來平衡這種先天的不足。這樣來說,在使用Promise的時候,我們只需要通過new關鍵字來創建新對象就可以了!02對比演示傳統回調演示:上述案例中,不難看出有兩個參數,參數一是a,參數二是一個函數。
  • JavaScript(js)對象常用操作
    前臺頁面中,經常使用到JS操作對象,JS是基於對象的腳本語言,屬於弱類型。js數據類型包括:Number,String,Boolean,null,undefined,Object數據類型判斷可以通過一元操作符typeof,此操作符可以判斷大部分JS數據類型。
  • 如何合理地創建對象實例以降低程序類之間關係的耦合度
    什麼時候應該創建類的對象實例?如何保證所創建出的類的對象實例能夠適時地被銷毀?其實上面的核心問題也就是軟體應用系統的開發人員如何能夠更高效地創建、並且松藕合、達到程序模塊的可擴展性?繼續採用如下的對象實例的創建形式嗎?
  • 第五篇:JavaScript事件處理
    HTML文檔或元素也稱為DOM對象,DOM是一套Web標準,它定義了訪問HTML文檔對象的一套屬性、方法和事件。DOM實際上是建立網頁與JavaScript語言溝通的橋梁。JS如何監聽事件?如果JS需要對DOM對象觸發的事件進行處理,就需要監聽這些事件,瀏覽器會自動調用監聽事件的JS函數。
  • 阿里Java開發規約為什麼不建議使用Apache BeanUtils拷貝對象?
    前言做 JAVA 開發的同學都知道,在 JAVA 世界中萬事萬物皆為對象。是我們在實際開發中,經常會遇到將一個對象實例拷貝轉換為另一個對象實例的情況:對兩個對象的屬性進行淺(深)度複製。如果在拷貝這個對象的時候,只對基本數據類型進行了拷貝,而對引用數據類型只是進行引用的傳遞,而沒有真實的創建一個新的對象,即為淺拷貝。反之,在對引用數據類型進行拷貝的時候,創建了一個新的對象,並且複製其內的成員變量,即為深拷貝。
  • 說說那些經典的web前端面試題-JavaScript部分
    所以,如果你把父函數當作對象(object)使用,把閉包當作它的公用方法(Public Method),把內部變量當作它的私有屬性(private value),這時一定要小心,不要隨便改變父函數內部變量的值。什麼是跨域?跨域請求資源的方法有哪些?1、什麼是跨域?
  • javascript中數組的22種方法
    1、對象繼承方法數組是一種特殊的對象,繼承了對象Object的toString()、toLocaleString()和valueOf()方法toString()方法返回由數組中每個值的字符串形式拼接而成的一個以逗號分隔的字符串[注意]該方法的返回值與不使用任何參數調用join()方法返回的字符串相同[1,2,3].toString
  • 黑馬程式設計師:java基礎知識清單之如何創建類與對象?
    對象:是一類事物的具體體現。對象是類的一個實例,是具體的。類與對象的關係:類是對象的模板,對象是類的實體。創建類-格式:成員變量(屬性):變量類型 變量名;成員方法(行為):public 返回值類型 方法名稱(參數){方法體};注意:1、成員變量直接寫在類當中,是在方法外邊。2、成員方法不需要寫static關鍵字。創建對象-格式:1、導包:對於和當前類屬於同一個包的情況下,不需要導包。
  • 如何使用JavaScript實現前端導入和導出excel文件
    使用JavaScript實現前端導入excel文件並自動生成可編輯的Table組件在開始實現之前, 我們先來看看實現效果.由於我們採用antd的table組件來渲染數據, 所以我們需要手動將解析出來的數據轉換成table支持的數據格式.大致流程如下: 所以我們需要做的就是將Upload得到的文件數據傳給xlsx, 由xlsx生成解析對象, 最後我們利用javascript算法將xlsx的對象處理成ant-table支持的數據格式即可.
  • JavaScript組件模式深入淺出
    匿名閉包(Anonymous Closures)這是使得模式可以正常工作的語言基礎,也實在是javascript最為實用的特性之一。我們可以簡單的創建一個匿名函數,並且立刻執行它。所有運行在該函數裡的代碼叫做一個閉包,它提供了在整個應用程式生命周期中都有效的數據隱私控制以及狀態保存功能。
  • AI中擴展對象的使用技巧?
    擴展對象,可以把一個對象拆分成若干個對象,並保持外觀不變。接來了我來簡單的演示具體操作方法。首先打開AI,創建一個畫板,為了方便演示,我先創建一個矩形,填充和描邊設置反差比較大的顏色,並且描邊加粗。用滑鼠選中矩形,然後找到軟體上方的對象,選擇擴展,會出現如下對話框。在填充和描邊前的小方塊裡打對勾,單擊確定,然後右擊矩形,選擇取消編組,滑鼠點擊填充顏色不要鬆手 ,移動滑鼠到想要的地方,鬆手,可以看到描邊和填充的部分變為兩個部分。下面演示擴展對象,首先我們找到光暈工具,在畫板上畫出一個光暈,並用滑鼠選中光暈,然後在對象裡點擊擴展。
  • 20個常用的JavaScript簡寫技巧
    多條件檢查 對於多個值匹配,我們可以將所有的值放到數組中,然後使用或方法。 11. 對象屬性複製 如果變量名和對象的屬性名相同,那麼我們只需要在對象語句中聲明變量名,而不是同時聲明鍵和值。JavaScript 會自動將鍵作為變量的名,將值作為變量的值。