通過建構函式建立物件的方式
function
person
(name,age)
var obj =
newperson
('test,18)
;
function
star
(uname, age)
}var ldh =
newstar
('劉德華', 18);
console.
log(ldh.uname)
;//例項成員只能通過例項化的物件來訪問
function
star
(uname, age)
}star.*** =
'男';
//針對不同的例項物件,此靜態成員的內容是固定的,不變化的。
var ldh =
newstar
('劉德華', 18);
var zxy =
newstar
('xx', xx)
;console.
log(star.***)
;//靜態成員只能通過建構函式來訪問
// 1. 建構函式的問題.
function
star
(uname, age)
} star.prototype.
sing
=function()
var ldh =
newstar
('劉德華', 18);
var zxy =
newstar
('張學友', 19);
console.
log(ldh.sing === zxy.sing)
;//true,證明這兩個物件共享了sing方法
// console.dir(star);
ldh.
sing()
;//例項物件可以直接訪問通過建構函式的原型物件新增的方法
zxy.
sing()
;// 2. 一般情況下,我們的公共屬性定義到建構函式裡面, 公共的方法我們放到原型物件身上
<
/script>
function
star
(uname, age)
star.prototype.
sing
=function()
var ldh =
newstar
('劉德華', 18);
var zxy =
newstar
('張學友', 19);
ldh.
sing()
; console.
log(ldh)
;// 物件身上系統自己新增乙個 __proto__ 指向我們建構函式的原型物件 prototype
console.
log(ldh.__proto__ === star.prototype)
;//true
// 方法的查詢規則: 首先先看ldh 物件身上是否有 sing 方法,如果有就執行這個物件上的sing
// 如果麼有sing 這個方法,因為有__proto__ 的存在,就去建構函式原型物件prototype身上去查詢sing這個方法
<
/script>
一般情況下,物件的方法都在建構函式的原型物件中設定。
如果有多個物件的方法,我們可以給原型物件採取物件形式賦值,但是 這樣就會覆蓋建構函式原型物件原來的內容,這樣修改後的原型物件 constructor 就不再指向當前建構函式了。此時,我們可以在修改後的原型物件中,新增乙個 constructor 指向原來的建構函式。
如果我們修改了原來的原型物件,給原型物件賦值的是乙個物件,則必須手動的利用constructor指回原來的建構函式如:
function
star
(uname, age)
// 很多情況下,我們需要手動的利用constructor 這個屬性指回 原來的建構函式
// 比如我們需要給原型物件指定多個函式,如下
// star.prototype.sing = function() ;
// star.prototype.movie = function()
// 指定多個函式時,上述**比較麻煩,我們一般會採用物件的形式指定:
star.prototype =
, movie:
function()
}var zxy =
newstar
('張學友', 19
);
function
star
(uname, age)
star.prototype.
sing
=function()
var ldh =
newstar
('劉德華',18
);// 1. 只要是物件就有__proto__ 原型, 指向原型物件
console.
log(star.prototype)
; console.
log(star.prototype.__proto__ === object.prototype)
;// 2.我們star原型物件裡面的__proto__原型指向的是 object.prototype
console.
log(object.prototype.__proto__)
;// 3. 我們object.prototype原型物件裡面的__proto__原型 指向為 null
<
/script>
function
star
(uname, age)
star.prototype.
sing
=function()
star.prototype.*** =
'女';
// object.prototype.*** = '男';
var ldh =
newstar
('劉德華',18
);ldh.*** =
'男';
console.
log(ldh.***)
; console.
log(object.prototype)
; console.
log(ldh)
; console.
log(star.prototype)
; console.
log(ldh.
tostring()
);<
/script>
不管建構函式中的this還是原型物件的this,都指向我們new出來的例項物件
**:
function
star
(uname, age)
var that;
star.prototype.
sing
=function()
var ldh =
newstar
('劉德華',18
);// 1. 在建構函式中,裡面this指向的是物件例項 ldh
ldh.
sing()
; console.
log(that === ldh)
;// 2.原型物件函式裡面的this 指向的是 例項物件 ldh
<
/script>
// 原型物件的應用 擴充套件內建物件方法
array.prototype.
sum=
function()
return sum;};
// array.prototype =
// return sum;
// }
// }
var arr =[1
,2,3
];console.
log(arr.
sum())
; console.
log(array.prototype)
;var arr1 =
newarray(11
,22,33
);console.
log(arr1.
sum())
;<
/script>
建構函式建立物件
字面量方式 new 關鍵字 借用建構函式 在記憶體中建立乙個新的空物件。讓 this 指向這個新的物件。執行建構函式裡面的 給這個新物件新增屬性和方法。返回這個新物件 建構函式裡面不需要 return 例項成員 建構函式內部通過this新增的成員,例項成員只能通過例項化的物件來訪問 靜態成員 在建構...
建構函式建立物件
建構函式建立物件 function box name,age 建構函式沒有new object,但是它後台會自動var obj new object this就相當於obj 建構函式不需要返回物件引用,它是後台自動返回的 建構函式也是函式,但函式名第乙個字母要大寫 必須new建構函式名 new bo...
建構函式建立物件的 this ?
建構函式建立物件的 this 今天看到個練習 var spencer2 new object spencer2.age 22 spencer2.country united states 而用 this.age 22 則判斷沒通過。這次演習是使用建構函式符號分配屬性的物件。由於我們最初定義我們的物件...