Der*_*erg 5 javascript oop friend-class
我有一个创建 Widget 对象的 Factory 类。工厂对象稍后需要回调 Widget 对象的“私有方法”,以向其传递一些 ajax 信息。到目前为止,我想出的唯一实现是在 Widget 中创建一个公共方法,该方法将私有方法返回给工厂,然后删除自己,然后工厂返回新的 Widget,同时保留指向私有方法的指针. 这是一个简化的示例:
function Factory()
{
var widgetCallback = null;
this.ajaxOperation = function()
{
//some ajax calls
widgetCallback('ajaxresults');
}
this.getNewWidget = function()
{
var wid = new Widget();
widgetCallback = wid.getCallback();
return wid;
}
function Widget()
{
var state = 'no state';
var self = this;
var modifyState = function(newState)
{
state = newState;
}
this.getState = function()
{
return state;
}
this.getCallback = function()
{
delete self.getCallback;
return modifyState;
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来实现我所追求的效果,或者这是一种相当合理的方法?我知道它有效,只是想知道我是否步入了我应该注意的任何陷阱。
this.getNewWidget = function() {
var val = new Widget(),
wid = val[0],
widgetCallback = val[1];
return wid;
}
function Widget() {
var state = 'no state';
var self = this;
var modifyState = function(newState) {
state = newState;
}
this.getState = function() {
return state;
}
// Return tuple of Widget and callback
return [this, modifyState];
}
Run Code Online (Sandbox Code Playgroud)
只需让你的构造函数返回一个Tuple<Widget, function>
另一种方法是使用闭包作用域widgetCallback直接在Widget构造函数中进行编辑
function Factory() {
var widgetCallback = null;
this.ajaxOperation = function() {
//some ajax calls
widgetCallback('ajaxresults');
}
this.getNewWidget = function() {
return new Widget();;
}
function Widget() {
var state = 'no state';
var self = this;
// set it directly here!
widgetCallback = function(newState) {
state = newState;
}
this.getState = function() {
return state;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3132 次 |
| 最近记录: |