建立物件 (js)

2021-10-25 10:40:29 字數 4572 閱讀 8033

function

person

(name, age, ***)

return o //返回該物件

}var person1 =

person

('xioahong',18

,'girl'

) person1.

sayname()

//xiaohong

var person2 =

person

('xiaoming',17

,'boy'

) person2.

sayname()

//xiaoming

console.

log(person1.sayname === person2.sayname)

//false

注意:sayname方法都各自存在於person1和person2例項物件中,所以它們的位址不相同,所以最後一行**會返回false。

沒有解決物件識別的問題(即怎樣知道乙個物件的型別)

function

person

(name, age, ***)

person.prototype.

sayname

=function()

var person1 =

newperson

('xiaoming',18

,'boy'

) person1.

sayname()

//xiaoming

var person2 =

newperson

('xiaohong',18

,'girl'

) person2.

sayname()

//xiaohong

console.

log(person1.sayname === person2.sayname)

//true

最後一行**返回true,和上面工廠模式返回的不一樣,因為這個sayname方法定義在原型上,person1和person2訪問的都是原型上的sayname方法,所以會返回true。

該模式與工廠模式有幾點不同:

沒有顯示地建立物件

直接將屬性和方法賦給了this物件

沒有return語句

new操作符呼叫建構函式經歷的幾個步驟

建立乙個新物件

將建構函式的作用域賦給新物件(因此this就指向了這個新物件)

執行建構函式中的**(為這個新物件新增屬性)

返回新物件

注意:建構函式始終都以乙個大寫字母開頭,而非建構函式則應該以乙個小寫字母開頭。

function

person()

person.prototype.name =

'huang'

person.prototype.age =

18 person.prototype.*** =

'boy'

person.prototype.

sayname

=function()

var person1 =

newperson()

var person2 =

newperson()

person1.name =

'xiaoming'

person1.

sayname()

//xiaoming

person2.

sayname()

//huang

var keys = object.

keys

(person.prototype)

var keys1 = object.

getownpropertynames

(person.prototype)

console.

log(keys)

//"name,age,***,sayname"

console.

log(keys1)

//"constructor,name,age,***,sayname"

console.

log(person.prototype.

isprototypeof

(person1)

)//true

console.

log(person.prototype.

isprototypeof

(person2)

)//true

console.

log(object.

getprototypeof

(person1)

=== person.prototype)

//true

isprototypeof():方法用來確定例項與原型之間是否有關係。

getprototypeof():該方法用來獲取物件的原型物件。

object.keys():接受乙個物件作為引數,返回乙個包含所有可列舉屬性的字串陣列。

object.getownpropertynames():接受乙個物件作為引數,返回乙個包含所有屬性的字串陣列,無論該屬性是否可以被列舉。

建構函式模式用於定義例項屬性,而原型模式用於定義方法和共享的屬性。這樣,每個例項都會有自己的乙份例項屬性的副本,但同時又共享著對方法的引用,最大限度地節省了記憶體(建立自定義型別地最常見方式)。

function

person

(name, age, ***)

person.prototype =

}var person1 =

newperson

('xiaoming',18

,'boy'

)var person2 =

newperson

('xiaohong',18

,'girl'

) person1.friends.

push

('van');

console.

log(person1.friends)

//xiaogang,xiaoli,van

console.

log(person2.friends)

//xiaogang,xiaoli

console.

log(person1.friends === person2.friends)

//false

console.

log(person1.sayname === person2.sayname)

//true

function

person

(name, age, ***)}}

var person1 =

newperson

('xiaoming',18

,'boy'

) person1.

sayname()

//xiaoming

var person2 =

newperson

('xiaohong',18

,'girl'

) person2.

sayname()

//xiaohong

function

specialarray()

return values;

}var colors =

newspecialarray

('red'

,'blue'

,'green');

console.

log(colors.

topipedstring()

)//red|blue|green

注意:返回的物件與建構函式或者與建構函式的原型屬性之間沒有關係;也就說,建構函式返回的物件與在建構函式外部建立的物件沒有什麼不同。為此,不能依賴instanceof操作符來確定物件型別。

function

person

(name, age, ***)

return o

}var person1 =

newperson

('xiaohong',18

,'girl'

) person1.

sayname()

//小紅

通過**我們不難發現,除了呼叫sayname方法之後沒有別的方法可以訪問其資料成員。提供了一種安全性,非常適合在某些安全執行環境。

與寄生建構函式有兩點不同:

新建立物件的例項方法不引用this

不適用new操作符呼叫建構函式

js 建立js物件

js建立類有集中方法,我個人比較喜歡的方式是 混合的建構函式 原型方式 比較好理解 用建構函式來定義非函式屬性,用原型方式定義物件的函式屬性,結果所有函式鬥只建立一次,而每個物件鬥具有自由的物件屬性例項。function ocar color ocar.prototype.showcolor fun...

js建立物件陣列 JS 物件

定義 無序的資料集合 鍵值對集合 建立物件的方式 new 操作符 object 建立物件 var person new object person.name lisi person.age 21 person.family lida lier wangwu person.say function 2...

js 建立物件

js建立物件方式 var lev function function parent var x parent alert x.name alert x.lev 說明 1.在函式中定義物件,並定義物件的各種屬性,雖然屬性可以為方法,但是建議將屬性為方法的屬性定義到函式之外,這樣可以避免重複建立該方法 ...