JavaScript原型: 理解原型是更好地理解代碼如何工作的關(guān)鍵。首先,我們需要知道原型是什么以及如何使用。
JavaScript是一種基于原型的編程語言,意味著在JavaScript中的每個(gè)對(duì)象都是從另一個(gè)對(duì)象繼承而來的,即原型。對(duì)象之間是通過共享屬性來聯(lián)系在一起的。讓我們看一個(gè)例子:
```
let myObj = {name: 'John'}
console.log(myObj.name) // "John"
```
在這個(gè)例子中, `myObj` 是由對(duì)象字面量創(chuàng)建的一個(gè)對(duì)象。字面量重新分配給變量時(shí),對(duì)象的引用值被分配給該變量。 `myObj` 對(duì)象的 `__proto__` 屬性指向構(gòu)造函數(shù) `Object.prototype`,因此在這個(gè)對(duì)象上有許多可用的屬性和方法。其中一個(gè)屬性就是 `name`,從 `Object.prototype` 繼承而來。原型是一個(gè)對(duì)象,其中包含了被繼承的屬性。
原型鏈: 那么,如果我們通過一個(gè)對(duì)象的屬性訪問另一個(gè)對(duì)象的屬性時(shí),它們是如何相互關(guān)聯(lián)的呢?這就是通過 `原型鏈` 完成的。當(dāng)我們?cè)L問的屬性不存在于對(duì)象本身時(shí),它會(huì)沿著原型鏈向上查找,直到在鏈上找到該屬性或鏈的末尾。以下代碼演示了原型鏈的工作原理:
```
let myObj = {name: 'John'}
console.log(myObj.toString()) // "[object Object]"
```
在這個(gè)例子中,當(dāng)我們?cè)L問 `myObj` 對(duì)象上不存在的方法 `toString()` 時(shí),它會(huì)首先查找 `myObj` 對(duì)象本身,發(fā)現(xiàn)它沒有這個(gè)方法,然后它會(huì)查找作為 `Object` 構(gòu)造函數(shù)一部分的 `prototype` 對(duì)象,發(fā)現(xiàn)它有該方法,所以我們成功地調(diào)用了該方法。
繼承: 我們知道在JavaScript中,原型能為已存在的對(duì)象添加新屬性和方法。這使得繼承在JavaScript中變得非常簡單。以下是繼承的例子:
```
let Person = function(name) {
this.name = name
}
Person.prototype.getName = function() {
return this.name
}
let Employee = function(name, title) {
Person.call(this, name)
this.title = title
}
Employee.prototype = Object.create(Person.prototype)
Employee.prototype.constructor = Employee
Employee.prototype.getTitle = function() {
return this.title
}
let john = new Employee('John', 'Manager')
console.log(john.getName()) // "John"
console.log(john.getTitle()) // "Manager"
```
在這個(gè)例子中,通過在 `Person.prototype` 上添加一個(gè)方法,我們讓所有 `Person` 對(duì)象都能繼承該方法。在 `Employee.prototype` 中,它繼承了 `Person` 的 `prototype`,以便 `Employee` 對(duì)象都可以使用該方法。在 `Employee.prototype` 上定義了一個(gè)新方法 `getTitle()`,該方法只能由 `Employee` 對(duì)象訪問。這個(gè)例子展示了繼承是如何在JavaScript中工作的。
總結(jié): 在JavaScript中,每個(gè)對(duì)象都是由另一個(gè)對(duì)象原型繼承而來的。原型鏈?zhǔn)共煌瑢?duì)象之間產(chǎn)生聯(lián)系,并允許從原型繼承屬性和方法。通過繼承,我們可以將對(duì)象組織成具有描述性的結(jié)構(gòu),并為對(duì)象添加額外屬性和方法。理解原型是更好地理解JavaScript如何工作的關(guān)鍵。
網(wǎng)站導(dǎo)航
- zblogPHP模板zbpkf
- zblog免費(fèi)模板zblogfree
- zblog模板學(xué)習(xí)zblogxuexi
- zblogPHP仿站zbpfang