一、建構函式內定義的屬性/方法
function
fn(name)
;var a =
newfn
('張三');
var b =
newfn
('李四');
console.
log(a.name)
//張三
console.
log(b.name)
//李四
可以看出:建構函式內定義的屬性/方法,對例項來說是不共享的,每乙個例項都有各自的乙份。互不影響!!
二、被繼承的原型物件中屬性/方法
function
fn(name)
;fn.prototype.age=
'13'
var a =
newfn
('張三');
var b =
newfn
('李四');
console.
log(a.name)
//張三
console.
log(b.name)
//李四
console.
log(a.age)
//13
console.
log(b.age)
//13
可以看出:被繼承的原型物件中屬性/方法是共享的,所有例項全可以共享其建構函式中原型物件的屬性/方法;
誤導
function
fn(name)
;fn.prototype.age=
'13'
var a =
newfn
('張三');
var b =
newfn
('李四');
fn.prototype=
console.
log(a.name)
//張三
console.
log(b.name)
//李四
console.
log(a.age)
//13
console.
log(b.age)
//13
console.
log(a.url)
//undefined
console.
log(b.url)
//undefined
既然原型物件屬性共享,那麼為什麼整體置換了原型物件的時候不應該列印下面那種情況嗎?為什麼不是呢?
console.
log(a.name)
//張三
console.
log(b.name)
//李四
console.
log(a.age)
//undefined
console.
log(b.age)
//undefined
console.
log(a.url)
console.
log(b.url)
原因是:在置換建構函式的原型物件的時候,例項a和例項b已經創立了;
此時:a 和 b 的 _proto_指向的是之前的原型物件;現在的原型物件實質就是將prototype指向乙個新的物件;和之前的原型物件沒有關係!
如果寫成這樣,那就是你想的那樣子了!
function
fn(name)
;fn.prototype.age=
'13'
fn.prototype=
var a =
newfn
('張三');
var b =
newfn
('李四');
console.
log(a.name)
//張三
console.
log(b.name)
//李四
console.
log(a.age)
//undefined
console.
log(b.age)
//undefined
console.
log(a.url)
console.
log(b.url)
那如果既想把置換原型的方法寫在創造例項之後,又想成功置換,該怎麼辦呢?很簡單 只需要通過_proto_把指標指向新的原型物件即可!
請看**↓
function
fn(name)
;fn.prototype.age=
'13'
var a =
newfn
('張三');
var b =
newfn
('李四');
fn.prototype=
//例項通過__proto__把指標指向新置換的原型物件
a.__proto__=fn.prototype;
b.__proto__=fn.prototype;
console.
log(a.name)
//張三
console.
log(b.name)
//李四
console.
log(a.age)
//undefined
console.
log(b.age)
//undefined
console.
log(a.url)
console.
log(b.url)
屬性和放方法,結構和類(建構函式)
一 類 類的定義 類的定義是以關鍵字 class 開始,後跟類的名稱。類的主體,包含在一對花括號內。二 屬性 屬性是類,結構和介面的命名成員。類或結構中的成員變數或方法稱為域。屬性是域的擴充套件,且可使用相同的語法來訪問。它們使用訪問器讓私有域的值可被讀寫或操作。屬性不會確定儲存位置。相反,它們具有...
案例 借用父建構函式繼承屬性和方法
借用父建構函式繼承屬性 1.父建構函式 function father uname,age father.prototype.money function 2 子建構函式 function son uname,age,score father.prototype 這樣直接賦值會有問題,如果修改了子原...
函式屬性和方法
ecmscript的函式是物件,所以有屬性和方法。每個函式包含兩個屬性,length和prototype。function sayname name function sum num1,num2 function sayhi alert sayname.length 定義了乙個引數,所以為1 ale...