【问题标题】:Oriented object javascript : initialize an attribute with a self function call面向对象javascript:使用self函数调用初始化属性
【发布时间】:2014-09-23 13:20:10
【问题描述】:

我用 javascript 编写了这个类:

function MyClass(id) 
{
    this.attribID = this.getID(id);

    // ==========================================================================
    this.getID = function(id) { return ("tooltip_" + id);   }
    // ==========================================================================
}

当我从我的 HTML 中调用它时:

<script>
var a = new MyClass("onecell");
</script>

它会产生这个错误:this.getID is not a function

如何使用在 MyClass 中定义的通用函数来初始化我的属性,该函数也可以从除初始化之外的许多其他地方调用?

【问题讨论】:

  • 在调用它之前尝试声明getID
  • this.attribID = this.getID(id);放在函数定义之后。
  • @HenriqueBarcelos——如果使用函数声明,它可以在范围内的任何地方,它不必在“之前”被调用。但是,由于 OP 使用了function expression,因此它必须在调用之前,因为在执行分配的语句执行之前不会发生分配。
  • @RobG 是的,你说得对,我应该解释得更好。
  • @RobG :感谢您的精确。你能开发一下吗,我不确定你的意思是“如果使用函数声明,它可以在范围内的任何地方”,我并没有真正与 Javascript 一起使用

标签: javascript oop methods attributes initialization


【解决方案1】:

只是澄清@RobG 的建议

有两种方法。

更改作业顺序:

function MyClass(id) 
{
    this.getID = function(id) { return ("tooltip_" + id);   }
    this.attribID = this.getID(id);
}

或者使用类原型:

function MyClass(id) 
{
    this.attribID = this.getID(id);
}

MyClass.prototype.getID = function(id) { return ("tooltip_" + id); };

【讨论】:

    【解决方案2】:

    只需像这样移动 this.getID 函数:JSFiddle

    function MyClass(id) 
    {
       // ==========================================================================
       this.getID = function(id) { return ("tooltip_" + id);   }
       // ==========================================================================
    
       this.attribID = this.getID(id);
    }
    

    【讨论】:

    • 或将 getID 方法放在 MyClass.prototype 上,并确保在尝试创建实例之前进行分配。
    猜你喜欢
    • 2013-10-28
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    相关资源
    最近更新 更多