1

第一次海报,长期潜伏。

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

  1. 我想以特定方式(通过调用原型)向父类添加方法。
  2. 我打算在每次进行关联方法调用时更新声明的键/值对。TheSuper 中看到的 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}; 
}; 

我想执行这样的事情(非常简单):

theSuper.executeMTAction(); 
theSuper.tapUITextView("a", "b"); 

不幸的是,我无法覆盖父级中的“this.options”,并且 .tapUITextView 方法会抛出一个错误,指出它找不到 executeMTAction。

正如我所说,我想做的就是更新父级中的参数,然后每次我进行任何方法调用时都运行 executeMTAction。就是这样。有什么想法吗?我知道这是基本的,但我来自一个长期的程序职业生涯,并且 .js 似乎有这种奇怪的 oo/procedural 融合,我遇到了一些困难。

感谢您的任何意见!

4

1 回答 1

0

而不是这样做......

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()”。我认为你可以在 TheSuper 中定义 '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);

对不起,这对我来说是漫长的一周。我可能完全错过了你的要求。希望它可以帮助一些。

于 2013-06-29T05:17:07.097 回答