由于构造函数在另一个函数中,所以没有定义新对象

New object is not defined due constructor being inside another function

本文关键字:定义 新对象 对象 构造函数 另一个 函数      更新时间:2023-09-26

我的问题:当我创建一个新对象时,构造函数被深深地嵌套在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/

问题在于您可以在liquidFont之前调用breakpoint。liquidFont函数包含断点的代码,如果你不调用它,断点将永远不会被定义。

但是如果你首先调用liquidFunction并使用一个变量设置全局断点,你可以从任何地方调用它

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

的例子:http://jsfiddle.net/hkqxswed/4/

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


也许你需要重构liquidFont函数并将其转换为"静态类",在此之后,你将访问每个属性&方法:

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();