gpt4 book ai didi

javascript - JavaScript 中的 "Friend Classes"

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:36:44 25 4
gpt4 key购买 nike

我有一个创建 Widget 对象的工厂类。 Factory 对象需要在稍后回调 Widget 对象的“私有(private)方法”以向其传递一些 ajax 信息。到目前为止,我想出的唯一实现是在 Widget 中创建一个公共(public)方法,将私有(private)方法返回给工厂,然后删除自身,然后工厂返回新的 Widget,同时保留指向私有(private)方法的指针.这是一个简化的示例:

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>

或者只使用闭包作用域来编辑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;
}
}
}

关于javascript - JavaScript 中的 "Friend Classes",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6423918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com