我将一个对象字面量传递给一个名为supportP()
. 这个对象字面量有一个特殊的属性叫做_p
,它表示它的成员是私有的。从对象文字中的 with 可以通过this._p
. 但是,当我将对象文字传递到“外部”范围时,我不会复制_p
. 它现在已因遗漏而被私有化。为了从公共成员方法访问 _p,我使用将它们绑定到原始对象,bind()
因此它们仍然可以通过 _p 访问this
。
这行得通吗?还有其他需要考虑的事情吗?在我测试之前想要一些反馈。
以下是相关的片段。
/*$A.supportP
**
**
**
*/
$A.supportP = function (o, not_singleton) {
var oo
key;
SupportList[o.Name] = {};
if (not_singleton) {
// ignore this section
} else { // *look here - isFunc returns true if a function
for (key in o) {
if ((key !== '_p') && (isFunc(o[key])) {
oo[key] = o[key].bind(o);
} else if (key !== '_p') {
oo[key] = o[key];
} else {
// private (_p) - anything to do here?
}
}
return oo;
}
};
/*$A.test
**
**
**
*/
var singleton_object = $A.supportP({
_p: 'I am private',
Name: 'test',
publik_func: function () {
// this will refer to this object so that it can access _p
// this._p is accessible here due to binding
}
}, false);