如何从构造函数中访问原型对象?
在下面的 Javascript 代码中,我有一个带有两个 getter/setter 函数的 Person 构造函数,以及在其原型中定义的水合物函数:
+++++++++++++++++++++++++++++
+ Person +
+++++++++++++++++++++++++++++
+ setFirstname( firstname ) +
+ getFirstname() +
+ setLastname( lastname ) +
+ getLastname() +
+++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++
+ Person.prototype +
+++++++++++++++++++++++++++++
+ hydrate( person ) +
+++++++++++++++++++++++++++++
我想从 Person 构造函数中调用 hydrate(( 函数,即使这对我来说毫无意义,这就像在对象完全创建之前调用一个方法,对吧? 如果我错了,请纠正我。脚本代码:
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"
} );
结果:
错误:未捕获的类型错误: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"
} );