使用私有变量的Javascript构建器模式
我试图在Javascript中创建一个使用私有变量的构建器模式,同时提供一个公共访问器(使用私有变量的Javascript构建器模式,javascript,builder-pattern,Javascript,Builder Pattern,我试图在Javascript中创建一个使用私有变量的构建器模式,同时提供一个公共访问器(fullName),返回所有其他属性的mashup。建议我可以在person构造函数中使用Object.defineProperty,以访问私有变量,但它不起作用-实例。全名始终是未定义的 我怎样才能使构建器模式变量保持私有,但公共访问器可以在整个构建链中访问它们 var Person = function () { var _firstName, _lastName Object.defi
fullName
),返回所有其他属性的mashup。建议我可以在person构造函数中使用Object.defineProperty
,以访问私有变量,但它不起作用-实例。全名始终是未定义的
我怎样才能使构建器模式变量保持私有,但公共访问器可以在整个构建链中访问它们
var Person = function () {
var _firstName, _lastName
Object.defineProperty(this, "fullName", {
get: function () {
return _firstName + ' ' + _lastName;
}
});
return {
firstName: function (n) {
_firstName = n
return this
},
lastName: function (n) {
_lastName = n
return this
}
}
}
var x = new Person().firstName('bob').lastName('dole');
console.log(x.fullName); // always undefined
根据我的注释,将传递的对象更改为defineProperty()
:
我怀疑这是因为从Person
返回的对象与调用object.defineProperty()
的this
不同。嗯,坦白说object.defineProperty()
并不是这样做的正确方法。如果我必须使用公共属性,这很好,但即使使用这个。_firstName
等也不能用于此设计。热!非常感谢。有道理。
var Person = function () {
var _firstName, _lastName
var _self = {
firstName: function (n) {
_firstName = n
return this
},
lastName: function (n) {
_lastName = n
return this
}
}
Object.defineProperty(_self, "fullName", {
get: function () {
return _firstName + ' ' + _lastName;
}
});
return _self;
}
var x = new Person().firstName('bob').lastName('dole');
console.log(x.fullName); // bob dole