Javascript 了解基本的原型设计和设计;更新键/值对

Javascript 了解基本的原型设计和设计;更新键/值对,javascript,prototype,Javascript,Prototype,第一次海报,长期潜伏者 我正在尝试学习.js的一些更高级的功能,并且基于下面粘贴的代码有两个目标: 我希望以特定的方式(通过调用prototype)向父类添加方法 我打算在每次进行关联的方法调用时更新声明的键/值对。无论如何,Super中的execMTAction都将执行每个函数调用。这是故意的 代码如下: function TheSuper(){ this.options = {componentType: "UITabBar", componentName: "Visual Browse

第一次海报,长期潜伏者

我正在尝试学习.js的一些更高级的功能,并且基于下面粘贴的代码有两个目标:

  • 我希望以特定的方式(通过调用prototype)向父类添加方法
  • 我打算在每次进行关联的方法调用时更新声明的键/值对。无论如何,Super中的execMTAction都将执行每个函数调用。这是故意的 代码如下:

    function TheSuper(){ 
    
    this.options = {componentType: "UITabBar", componentName: "Visual Browser", componentMethod: "select", componentValue: null}; 
    execMTAction(this.options.componentType, this.options.componentName, this.options.componentMethod, this.options.componentValue); 
    
    }; 
    
    TheSuper.prototype.tapUITextView = function(val1, val2){ 
    
    this.options = {componentType: "UITextView", componentName: val1, componentMethod: "entertext", componentValue: val2}; 
    }; 
    
    我想执行这样的操作(非常简单):

    不幸的是,我无法覆盖父级中的“this.options”,并且.tapUITextView方法抛出一个错误,表示找不到ExecuteMaction

    正如我所说,我想做的就是更新父对象中的参数,然后在每次调用任何方法时运行ExecuteMaction。就这样。有什么想法吗?我知道这是基本的,但我来自一个长期的程序职业生涯,而.js似乎有一种奇怪的oo/程序的融合,这让我有点困难


    谢谢你的意见

    而不是这样做

    TheSuper.prototype.tapUITextView = function(val1, val2){ 
    
    this.options = {componentType: "UITextView", componentName: val1, componentMethod: "entertext", componentValue: val2}; 
    };
    
    您可以更新对象的值,而不是试图覆盖它

    this.options['componentType'] = "UITextView";
    this.options['componentName'] = val1;
    this.options['componentMethod'] = "entertext"; // etc...
    
    我看不出您在哪里定义了“executeMTAction()”。我认为您可以在super中定义'executeMTAction',并从您的方法w/'this'执行它

    function TheSuper() {
        this.executeMTAction = function(options) {
            // define...
        }
    }
    TheSuper.prototype.amethodname = function(options) {
        this.execMTAction(options);
    }
    
    您也可以在进行方法调用时将函数作为参数传递,并将其用作回调

    TheSuper.prototype.amethodname = function(options, callback) {
        callback(options);
    }
    
    theSuper.amethodname(options, execMTAction);
    

    对不起,这一周对我来说太长了。我可能完全错过了你的要求。希望能有所帮助。

    什么是ExecuteMaction?这是对一个单独函数的特定调用,我使用该函数为我的移动自动化工具构建执行字符串。我传入ui元素、方法等的类型,execMTAction处理与对象的交互并执行各种验证检查。lib包含在我获取这段代码的完整脚本中。这对我来说太有洞察力了!谢谢你的回复。我仍然在考虑实现一些回调结构,但是已经以这种方式重构了我的代码,并且运行得非常好。
    TheSuper.prototype.amethodname = function(options, callback) {
        callback(options);
    }
    
    theSuper.amethodname(options, execMTAction);