js建構函式和原型

2022-03-04 14:02:10 字數 1984 閱讀 8998

建立物件的方式

1,物件字面量

var obj1 ={}

2,new

object()

var obj2 = new

object()

3,利用建構函式建立物件

建構函式

利用建構函式 可以建立很多個物件

建構函式,把物件中公共屬性和方法抽出來,放在建構函式裡,通過new建立不同的物件

function

star (name ,age)

}

建構函式+原型

通過原型分配的函式,所有物件都可以共享

function

star (name ,age)}//

通過原型分配的函式,所有物件都可以共享

star.prototype.song = function

()star.prototype.movie = function

()var ldh = new star('劉德華', 18)

var zbz = new star('張柏芝', 19)

console.log(ldh)

ldh.song()

zbz.song()

new的執行過程:

1,new乙個建構函式的時候,就建立乙個空的物件

2,把建構函式的 this 指向空的物件

3,把建構函式屬性和方法 進行賦值操作,賦給空物件

4,返回建立乙個新物件

總結:建構函式 封裝的方法在 建立新物件的時候會浪費記憶體,建立乙個物件就開闢一塊新記憶體

原型:每乙個建構函式都有乙個prototype屬性,指向另乙個物件,這個物件就是原型物件; 這個物件的所有屬性和方法,都會被建構函式所擁有。

我們可以把那些不變的方法,定義在prototype物件上,這樣所有新的例項物件就可以共享這些方法

原型的作用:共享方法,節約記憶體

為什麼物件可以呼叫原型上的方法:

每乙個物件身上都有乙個 __proto__屬性  它指向我們的建構函式的原型物件prototype,所以物件就可以使用建構函式prototype原型物件

的屬性和方法。

__proto__物件和原型物件prototype是等價的

console.log(ldh.__proto__ ===star.prototype)

//constructor我們稱為建構函式,因為它指回建構函式本身

//constructor的作用:告訴我們物件 是引用那個建構函式創造出來的

console.log(star.prototype)

console.log(ldh.__proto__)

原型鏈

1,只要是物件就有__proto__原型,它指向原型物件

2,我們star原型物件裡面的__proto__原型指向的是  object.prototype

console.log(star.prototype.__proto__ === object.prototype)

// 3,我們object.prototype原型物件裡面的__proto__原型   指向為null

console.log(object.prototype.__proto__)

只要是物件 它就有__proto__原型,這個原型指向 原型物件prototype,而原型物件也是物件,它也有自己的原型

原型物件的原型 prototype.__proto__指向object原型物件, object原型物件也有原型__proto__  這就是原型鏈

原型鏈就像一條線路,指引我們查詢物件的成員

1,首先在物件本身上去找,-> 2,物件上沒有通過原型__proto__,就去原型物件上去找,-> 3,原型物件沒有,就去object上去找,-> 4,object上沒有,那就返回null

js 建構函式和原型鏈

比較new和object.create 建構函式 new 保留原建構函式屬性 object.create 丟失原建構函式屬性 原型鏈new 原建構函式prototype屬性 object.create 原建構函式 物件 本身 作用物件 new function object.create funct...

JS的建構函式和原型函式

如果建立方法時,不應該在建構函式內部建立 而應在外部建立,在建構函式內部呼叫,這樣會節省很多空間。舉例解釋 問題 建立乙個persion的建構函式,為每乙個物件都新增sayname方法 如果在建構函式內部建立 如例1 則建構函式每執行一次,就會建立乙個新的sayname方法,而這是完全沒必要的,它們...

JS 建構函式 原型 new

1 每個函式都有乙個prototype屬性,該屬性指向函式的原型物件,原型物件的用途是可以讓所有物件例項共享它所包含的屬性和方法。2 預設情況下,每個原型物件都會自動獲得乙個constructor屬性,該屬性指向prototype屬性所在的函式。constructor屬性最初是用來標識物件型別的,但...