物件創建的三種方式:
- 利用new Object()創建物件;
var obj = new Obejct();
- 利用物件字面量創建物件;
var obj= {}; - 利用建構式創建物件;
function Star(name ,age){ this.name = name; this.age = age; this.sing=function(){ console.log("唱歌"); } }
var gg = new Star('張國榮',18);
gg.sing();new 做了哪些事情?
在記憶體中創建了一個空物件;讓this指向這個新物件;執行建構式里面的代碼,給這個新的物件添加屬性和方法;回傳這個新物件(所以建構式中不需要return);
實體成員和靜態成員
實體成員:通過this添加的成員,只能通過實體化的物件訪問;如上述代碼中的Star物件中的name,age,sing成員;
靜態成員:在建構式上直接添加的屬性,只能通過建構式訪問;如Star.sex=“男”;通過gg這個實體化的物件是訪問不了的;
建構式的問題
1、浪費記憶體;(每個實體化的物件中的函式都會開辟一個新的記憶體空間;)解決方法:protptype(原型物件)
建構式原型物件:prototype
建構式通過原型分配的函式是所有物件共享的;javaScript規定每個建構式中都會有一個prototype屬性,指向另一個物件,這個prototype就是一個物件,這個物件的所有屬性和方法,都會被構造 函式所擁有;(我們可以把不變的方法,直接定義在prototype物件上,這樣所有物件的實體就可以共享這些方法);
一般情況下,公共的屬性定義在建構式中,但公共的方法定義在建構式的原型中;
Star.prototype.sing=function(){
console.log("我會唱歌");
}
var gg = new Star('張國榮',18);
var ldh =new Star('劉德華',18);
gg.sing();
ldh.sing();
物件原型:__proto__
物件都會有一個屬性__proto__指向建構式的protype原型物件,之所以我們在物件中可以使用建構式prototype原型物件的屬性和方法,就是因為有__proto__原型的存在;
如果我們自改了原來的原型物件,給物件賦值給一個物件必須手動添加constrictor屬性指回原來的建構式;建構式、實體、原型物件三者的關系:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/95350.html
標籤:JavaScript
上一篇:ES6中export default 與export區別
下一篇:javascript的基礎
