【问题标题】:setting public property in a private function executed on initialization Javascript在初始化Javascript时执行的私有函数中设置公共属性
【发布时间】:2015-04-27 23:02:34
【问题描述】:

我有一个对象

myObj = function(){
    this.myPublicMember = null;
    function privateInitFunc(){
         this.myPublicMember = "blah blah test";
    }

    privateInitFunc()
}

myObj.prototype = {
    getPublicMember: function(){ console.log(this.myPublicMember) }
}

我像这样实例化:

 var a = new myObj();
 a.getPublicMember // logs Null!

如何在初始化时执行的私有函数中设置公共属性?我需要私有初始化函数,因为在设置 myPublicMember 之前还有一些其他变量

【问题讨论】:

  • 你写它的方式看起来很奇怪。也许你可以稍微扩展一下这个例子来说明为什么你需要那个额外的函数——它依赖于什么参数?我可能会将该函数放在构造函数范围之外,然后调用this.myPublicMember = initFunc();
  • @bergi public 成员实际上是来自 Phaser.js 框架的精灵。在初始化函数中,我添加子元素并修改该成员,以便在我的对象初始化时,公共成员已经是一个精灵,其中包含各种子元素。
  • 好的,但是为什么要把它放在一个额外的函数中而不是直接放在构造函数中呢?它是否被多次调用,可能是递归的还是什么?

标签: javascript constructor private public


【解决方案1】:

你应该在调用函数时设置上下文:

privateInitFunc.call(this)

【讨论】:

    猜你喜欢
    • 2017-02-05
    • 2013-05-16
    • 2015-06-09
    • 2017-03-19
    • 2012-12-15
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多