建立物件和繼承的幾種方式及區別(1)

2021-09-25 12:32:49 字數 3081 閱讀 4377

物件導向都有類的概念,通過類可以建立任意多個具有相同屬性和方法的物件。

每個物件都是基於乙個引用型別建立的。

ps:閱讀js高階程式教程第六章筆記

1、物件

建立:new object() / 物件字面量

var person =

newobject()

;person.name =

"qwe"

person.sayname =

function()

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

-------

var person =

}

es5定義只有內部使用的特性(attribute)時,描述了屬性(property)特徵。規範是將其放在[[ ]]中。屬性分為以下兩種:

1)資料屬性

包含乙個資料值,有4個描述其行為的特性:

[[configurable]]、[[enumerable]]、[[writable]]、[[value]]

前三個特性預設為true,[[value]]會根據建立設定的值賦值。

configurable設定為false後,不能再刪除、修改物件的屬性

var person =

object.

defineproperty

(person,

"name",)

console.

log(person.name)

// qwe

person.name =

"asd"

console.

log(person.name)

// qwe

enumerable表示能否通過for-in迴圈返回屬性

2)訪問器屬性

[[configurable]]、[[enumerable]]、[[get]]、[[set]]

var book =

// 定義物件資料屬性year

object.

defineproperty

(book,

"year",,

// 設定year屬性值,判斷設定的值是否大於2004 再進行賦值操作

set:

function

(newvalue)}}

) book.year =

2006

// 賦值 set

console.

log(book.year)

// 2006 獲取 get

ps:

修改屬性的預設特性方法:object.defineproperty()

讀取:object.getownpropertydescriptor()

var propertydes = object.

getownpropertydescriptor

(book,

'edition'

)console.

log(propertydes.value)

2、建立物件

object建構函式或者物件字面量可以實現建立單個物件,但是使用同乙個介面建立很多物件,會產生大量的重複**。

1)工廠模式

解決了建立多個相似物件的問題。

function createperson

(name)

;return obj;

} var person =

createperson

('qwe'

) console.

log(person.

getname()

)

問題:還是不知道乙個物件的型別。

2)建構函式模式

ecmascript中的建構函式可用來建立特定型別的物件。(object和array就屬於原生的建構函式)

function person

(name);}

var person =

newperson

('qwe'

)// new操作符建立例項

console.

log(person.

getname()

)

與工廠方法不同:

呼叫建構函式會經歷四個步驟:

person是person的例項,person是person的建構函式,因此person的建構函式屬性constructor是指向person的:

person.constructor == person// true

可以用來標識物件的型別,但是檢測物件型別,基本上使用instanceof

person instanceof person // true

person instanceof object // true(所有物件都繼承object,函式是物件,函式物件)

ps:值型別用typeof判斷,引用型別用instanceof判斷

問題:每建立乙個例項,getname方法都會重新建立一遍,生成不同的function例項,這是沒必要的。

解決:將函式抽取出來,放到建構函式外,設定成全域性的函式

function person

(name)

function getname()

但是,如果有很多的函式的話,就要定義很多的全域性函式,這是不現實的。

這就引申出原型模式。

建立物件的幾種方式

原文章 var person new object person.name kevin person.age 31 alert person.name alert person name alert person.name alert person 5 返回帶有屬性和方法的person物件 func...

建立物件的幾種方式

var person new object person.name lisi person.age 21 person.family lida lier wangwu person.say function var person 以上兩種方法在使用同一介面建立多個物件時,會產生大量重複 為了解決此問...

建立物件的幾種方式

let student function student name,age,likename return student let s1 student 小紅 18 吃大餐 s1.like 可以將都需要用到的方法進行封裝,封裝到乙個物件上,並讓建構函式的prototype屬性等於這個物件,這樣建立新...