建構函式的屬性和方法

2021-10-07 08:50:11 字數 2849 閱讀 1055

一、建構函式內定義的屬性/方法

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...