[英]How to access a the prototype object from within a constructor function?
如何從構造函數中訪問原型對象?
在以下Javascript代碼中,我有一個Person構造函數,該函數帶有兩個getter / setter函數,以及在其原型內定義的hydrate函數:
+++++++++++++++++++++++++++++
+ Person +
+++++++++++++++++++++++++++++
+ setFirstname( firstname ) +
+ getFirstname() +
+ setLastname( lastname ) +
+ getLastname() +
+++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++
+ Person.prototype +
+++++++++++++++++++++++++++++
+ hydrate( person ) +
+++++++++++++++++++++++++++++
我想從Person構造函數中調用hydrate()函數,即使這對我來說沒有意義,就像在完全創建對象之前調用方法,對嗎? 如果我錯了糾正我。 JavaScript代碼:
function Person( person ) {
var _firstname = '',
_lastname ='';
if ( person ) this.hydrate( person );
function setFirstname( firstname ) {
_firstname = firstname;
}
function getFirstname() {
return _firstname;
}
function setLastname( lastname ) {
_lastname = lastname;
}
function getLastname() {
return _lastname;
}
this.setFirstname = setFirstname;
this.getFirstname = getFirstname;
this.setLastname = setLastname;
this.getLastname = getLastname;
}
Person.prototype = {
hydrate: function( person ) {
this.setFirstname( person.firstname );
this.setLastname( person.lastname );
}
};
var john = new Person( {
firstname: "John",
lastname: "Doe"
} );
結果:
錯誤:未捕獲的TypeError:this.setFirstname不是函數
問題:我應該怎么做? 那有可能嗎?
為了做到這一點,我應該更改了hydrate()函數的調用位置,並將其一直放置在底部[在setFirstname()和setLastname()公開可用之后),如下所示:
function Person( person ) {
var _firstname = '',
_lastname ='';
function setFirstname( firstname ) {
_firstname = firstname;
}
function getFirstname() {
return _firstname;
}
function setLastname( lastname ) {
_lastname = lastname;
}
function getLastname() {
return _lastname;
}
this.setFirstname = setFirstname;
this.getFirstname = getFirstname;
this.setLastname = setLastname;
this.getLastname = getLastname;
if ( person ) this.hydrate( person );
}
Person.prototype = {
hydrate: function( person ) {
this.setFirstname( person.firstname );
this.setLastname( person.lastname );
}
};
var john = new Person( {
firstname: "John",
lastname: "Doe"
} );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.