如何从构造函数中访问原型对象?



如何从构造函数中访问原型对象?

在下面的 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"
} );

最新更新