由于构造函数位于另一个函数内,因此未定义新对象

时间:2015-09-20 14:15:15

标签: javascript constructor

我的问题:我无法引用我在创建新对象时定义的构造函数,因为构造函数深深嵌套在2个函数中:

Func1 - Func2 - Func2中的构造函数。

似乎我对返回的概念有一些问题。我的问题是我们称之为"关闭"?无论如何,当我在保存构造函数但不高一级的函数内创建新对象时它会起作用。

我想要实现的目标:我希望能够创建一个新对象,即使构造函数在各种嵌套函数中也是如此。

我很欣赏一些见解。我是一个纯粹的视觉学习者,所以欢迎这样的例子。

这就是我的构造函数的样子:

function breakpoint(init) {
    this.condition = (function init() {
        if (Math.abs( browser.width - cached.previousWidth) >= 100 && browser.width < 800) {
            elem.style.fontSize = Math.floor(result - 50) + 'px';
            cached.previousWidth = browser.width;
        }
    });
}

以下是Jsfiddle中的完整代码:

http://jsfiddle.net/hkqxswed/1/

1 个答案:

答案 0 :(得分:1)

问题是因为您可以在breakpoint之前致电liquidFont。 liquidFont函数包含断点代码,如果你从不调用它,则永远不会定义断点。

但是,如果您先拨打liquidFunction并使用变量拨打全球断点,则可以从任何地方拨打电话

liquidFont();
var a = new breakpoint("start");
a.condition();

示例: http://jsfiddle.net/hkqxswed/4/

如果你真的需要从enywhere调用断点,你可以创建一个js "class",使它成为全局,并从任何地方调用来创建实例。

也许您需要重构liquidFont函数并转换为“静态类”,之后您将访问每个属性&amp;来自任何地方的方法:

var liquidFont : {
        settings : {
             start: true,
             compress: 100,
             minimum: 30,
             maximum: 120,
             animate: true,
             animationSpeed: 2000
             },
        cached : {
                 previousWidth: window.innerWidth
        },
        ...
        init : function(){  ... },
        breakpoint : { 
          condition : function(){  ...  }
        }
};
liquidFont.init();
liquidFont.breakpoint.condition();