一、JS對象的基本概念和創建方法
在JavaScript中,對象是一種複合數據類型,它可以存儲多個不同數據類型的值,是一個無序的屬性集合。在JS中,對象由“屬性”和“方法”組成。屬性可以是基本數據類型、對象或數組,而方法則是一個函數。在JS中,對象是一個動態的實體,可以隨時添加、刪除和修改原有屬性。創建對象有以下幾種方法:
1.通過字面量創建
var obj = { name: "xiaoming", age: 18, sayHi: function(){ console.log("Hi, I am " + this.name + ", I am " + this.age + " years old."); } };
2.通過Object構造函數創建
var obj = new Object(); obj.name = "xiaoming"; obj.age = 18; obj.sayHi = function(){ console.log("Hi, I am " + this.name + ", I am " + this.age + " years old."); }
3.通過構造函數創建
function Person(name, age){ this.name = name; this.age = age; this.sayHi = function(){ console.log("Hi, I am " + this.name + ", I am " + this.age + " years old."); } } var obj = new Person("xiaoming", 18);
二、JS原型與原型鏈
每個對象都有一個原型對象,它是一個指向另一個對象的引用。這個對象被稱為原型對象。當讀取一個對象的屬性時,如果這個對象本身沒有這個屬性,那麼就會去它的原型對象中查找。如果原型對象中也沒有這個屬性,就會去原型對象的原型對象中查找,直到找到 Object.prototype 為止,這樣就形成了一個鏈式結構,叫做原型鏈。
每個函數都有一個 prototype 屬性,它指向一個對象,這個對象就是該構造函數的原型對象。當通過構造函數創建一個新對象時,這個新對象會從它的構造函數的原型對象中繼承屬性和方法。原型鏈的概念讓我們可以復用已有對象的屬性和方法,提高了代碼的復用率。
示例:
function Person(name, age){ this.name = name; this.age = age; } Person.prototype.sayHi = function(){ console.log("Hi, I am " + this.name + ", I am " + this.age + " years old."); } var obj = new Person("xiaoming", 18);
三、JS繼承的實現
在JS中,繼承的實現有以下幾種方式:
1.原型鏈繼承
原型鏈繼承主要是通過修改子類的原型指向父類的實例,來實現子類繼承父類的屬性和方法。
function Animal(){ this.type = "animal"; } Animal.prototype.eat = function(){ console.log("I am eating..."); } function Cat(){} Cat.prototype = new Animal(); var cat = new Cat();
2.構造函數繼承
構造函數繼承主要是通過在子類的構造函數中調用父類的構造函數,來實現子類具有父類的屬性和方法。
function Animal(type){ this.type = type; } function Cat(){ Animal.call(this, "cat"); } var cat = new Cat();
3.組合繼承
組合繼承主要是通過用原型鏈繼承父類的方法與構造函數繼承父類的屬性相結合,來實現子類既具有父類的屬性又具有父類的方法。
function Animal(type){ this.type = type; } Animal.prototype.eat = function(){ console.log("I am eating..."); } function Cat(type){ Animal.call(this, type); } Cat.prototype = new Animal(); Cat.prototype.constructor = Cat;
四、JS對象的特殊對象和類型判斷方法
在JS中,有些對象是特殊對象,如:Object、Function、Array、Date、RegExp等。這些特殊對象都有自己特殊的屬性和方法,我們可以通過 typeof 判斷對象的類型。
typeof 返回一個表示數據類型的字符串,它是一個運算符而不是函數。它只有一個操作數,該操作數可以是任意類型,它返回的結果是表示操作數類型的一個字符串。常用的數據類型有:undefined、number、string、object、function、boolean。
var a = 123; console.log(typeof a); //"number"
另外,JS中還有 instanceof 和 Object.prototype.toString.call() 兩種類型判斷方法。
instanceof 運算符用於判斷一個對象是否是一個類的實例。它的原理是通過判斷對象的原型鏈中是否有這個構造函數的 prototype 對象。
function Person(){} var person = new Person(); console.log(person instanceof Person); //true console.log(person instanceof Object); //true
Object.prototype.toString.call() 可以獲取一個對象的字符串類型。它的原理是返回了對象類型的標準字符串表示。在進行類型轉換判斷時,它相對於 typeof 更加準確。
var a = 123; console.log(Object.prototype.toString.call(a)); //"[object Number]"
原創文章,作者:EEPRI,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/351781.html