"朋友班"在javascript中
"Friend Classes" in javascript
我有一个创建Widget对象的Factory类。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;
}
}
}
有没有更好的方法来达到我想要的效果,或者这是一个相当合理的方法?我知道它是有效的,只是好奇我是否陷入了我应该意识到的陷阱。
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];
}
只需让您的构造函数返回一个Tuple<Widget, function>
或者,只需使用闭包范围直接在Widget
构造函数中编辑widgetCallback
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;
}
}
}
我对面向对象的JavaScript不够熟悉(我在GWT代码中主要使用一到两行代码),无法给出真正的答案(但我发现我的回复有点长,需要注释…)
我认为自我修改类,听起来像是gotcha的一个主要潜力。
我个人更喜欢JavaScript、Ruby等语言,它们对你能做的事情没有限制(即使我在工作中必须使用Java+GWT,呵呵),但你可以依靠自律来不做愚蠢的事情。我宁愿在方法名称前面加上"_"(并简单地避免在不应该使用的地方使用它),也不愿尝试强制使用私有方法。由于JavaScript本质上不受你可能做的疯狂事情的限制,所以它无论如何都需要大量的纪律。
如果您在使用后删除了一个方法;为了保护它,你能不能简单地添加一种新的方法来做同样的事情?无论如何,你仍然会依靠你(和其他人)的自律和理智,不是吗?
相关文章:
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- Javascript复选框函数:;缺少:在属性id之后"
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- CKEditor如何允许href="javascript:void(0)"在小部件中
- 插入“;img src"在javascript中
- "访问控制允许起源”;通过javascript从http页面调用同一网站的httpsurl时出现问题
- 尝试使用Javascript正则表达式来获取“&"分隔文本,无论它是否's是最后一个值
- 如何's css标记"-webkit最小设备像素比”;在Javascript中实现
- 内联javascript与"<脚本>"字符串错误地关闭了脚本标记
- 什么是"!函数(){}〃;javascript中的mean/do
- 使用javascript"这个“;用于jquery选择器
- 我可以在不使用乘法运算符“”的情况下进行乘法运算吗*"在JavaScript中
- 用分隔符分隔具有多个整数值的字符串的Javascript"重试错误的值
- 什么是==+"在javascript中
- 什么是“;回归"javascript中的mean
- 可以't删除“;C: fakepath "使用javascript替换和regex
- 如何删除“"使用javascript从字符串中提取字符
- 如何使用Javascript获取当前页面URL,并在<a href="[the_URL]”>
- JavaScript异常:“;不成形”;在firefox浏览器上;XMLHttpRequest"chrome浏
- button1.Attributes.Add(“onclick"“javascript: window.open