前言
一晃終于學(xué)到了面向?qū)ο笱及停@一塊花了好長一段時間去理解瞻赶,內(nèi)容不多但是需要時間去消化
對象是什么
1)對象是單個事物的抽象
2)對象是一個容器知押,封裝了屬性(property)和方法(method)
什么是面向?qū)ο?/h2>
面向?qū)ο蟛皇切碌臇|西,它只是過程式代碼的一種高度封裝暂氯,目的在于提高代碼的開發(fā)效率和可維護(hù)性。
創(chuàng)建對象
- 簡單方式
1亮蛔、new Object() 創(chuàng)建
var person = new Object()
person.name = 'som'
person.age = 18
person.sayName = function() {
console.log(this.name)
}
面向?qū)ο蟛皇切碌臇|西,它只是過程式代碼的一種高度封裝暂氯,目的在于提高代碼的開發(fā)效率和可維護(hù)性。
1亮蛔、new Object() 創(chuàng)建
var person = new Object()
person.name = 'som'
person.age = 18
person.sayName = function() {
console.log(this.name)
}
2痴施、對象字面量創(chuàng)建
var person = {
name: 'som',
age: 18,
sayName: function(){
console.log(this.name)
}
}
- 工廠函數(shù)方式
function createPerson (name, age) {
return {
name: name,
age: age,
sayName: function () {
console.log(this.name)
}
}
}
優(yōu)雅的工廠函數(shù) - 構(gòu)造函數(shù)
function Person (name, age) {
this.name = name
this.age = age
this.sayName = function () {
console.log(this.name)
}
}
var p1 = new Person('Jack', 18)
p1.sayName() // => Jack
var p2 = new Person('Mike', 23)
p2.sayName() // => Mike
使用new 操作符構(gòu)造函數(shù)將經(jīng)歷下面4個步驟
- 創(chuàng)建一個新對象
- 將構(gòu)造函數(shù)的作用域賦給新對象(因此 this 就指向了這個新對象)
- 執(zhí)行構(gòu)造函數(shù)中的代碼
- 返回新對象
構(gòu)造函數(shù)和實(shí)例對象的關(guān)系
使用構(gòu)造函數(shù)的好處不僅僅在于代碼的簡潔性,更重要的是我們可以識別對象的具體類型了尔邓。在每一個實(shí)例對象中的proto中同時有一個 constructor 屬性晾剖,該屬性指向創(chuàng)建該實(shí)例的構(gòu)造函數(shù)
console.log(p1.constructor === Person) // => true
console.log(p2.constructor === Person) // => true
console.log(p1.constructor === p2.constructor) // => true
使用 instanceof 檢測實(shí)例是否屬于某個構(gòu)造函數(shù)構(gòu)建的
console.log(p1 instanceof Person) // => true
console.log(p2 instanceof Person) // => true
原型 prototype
每一個構(gòu)造函數(shù)都有一個prototype屬性,指向另一個對象梯嗽, 這個對象的所有屬性和方法都會被構(gòu)造函數(shù)的實(shí)例繼承
function Person (name, age) {
this.name = name
this.age = age
}
Person.prototype.type = 'human'
Person.prototype.sayName = function () {
console.log(this.name)
}
var p1 = new Person(...)
var p2 = new Person(...)
console.log(p1.sayName === p2.sayName) // => true
構(gòu)造函數(shù)齿尽、實(shí)例、原型之間的關(guān)系
更簡單的原型寫法
function Person (name, age) {
this.name = name
this.age = age
}
Person.prototype = {
constructor: Person, // => 手動將 constructor 指向正確的構(gòu)造函數(shù)
type: 'human',
sayHello: function () {
console.log('我叫' + this.name + '灯节,我今年' + this.age + '歲了')
}
}