Javascript 如果构造函数在另一个函数中,则新创建的对象调用构造函数undefined

Javascript 如果构造函数在另一个函数中,则新创建的对象调用构造函数undefined,javascript,Javascript,我刚刚学会了面向对象编程,有一件小事情我无法解决。这个问题是某种程度上的范围问题 如果我创建了一个新对象,那么如果构造函数在另一个函数中,我将如何授予它访问构造函数的权限?现在我没有定义。将函数存储在全局变量中不起作用 var example = new something x(parameter); example.i(); var getFunction; var onResize = function() { getFunction = f

我刚刚学会了面向对象编程,有一件小事情我无法解决。这个问题是某种程度上的范围问题

如果我创建了一个新对象,那么如果构造函数在另一个函数中,我将如何授予它访问构造函数的权限?现在我没有定义。将函数存储在全局变量中不起作用

  var example = new something x(parameter);
    example.i();

    var getFunction;

    var onResize = function() {

        getFunction = function something(parameter) {
            this.i= (function parameter() {
                    // Does something
            });
        };
    };

window.addEventListener('resize', onResize);
onResize();

对于OOP javascript,模式应该如下所示

//defining your 'class', class in quotes since everything is just functions, objects, primitives, and the special null values in JS
var Foo = function (options) {
  // code in here will be ran when you call 'new', think of this as the constructor.

  //private function
  var doSomething = function () {
  }

  //public function
  this.doSomethingElse = function () {
  }
};

//actual instantiation of your object, the 'new' keyword runs the function and essentially returns 'this' within the function at the end
var foo = new Foo(
    {
      //options here
    }
)

如果我理解你,你想知道如何访问另一个函数中的变量。您的尝试是合理的,但请注意,
getFunction
在调用
onResize
之后才被绑定。这里有一个更简洁的演示:

var x;

function y() {

    // The value is not bound until y is called.
    x = function(z) {
        console.log(z);
    }
}

y();
x('hello');
一种常见的JavaScript模式是返回一个表示函数API的对象。例如:

function Y() {
    var x = function(z) {
        console.log(z);
    }

    return {
        x: x
    };
}

var y = Y();
y.x('hello');

您肯定应该阅读JavaScript的基本概念。你的代码和术语都是草率的。我推荐。它很好地解释了作用域和函数,这是JavaScript中两个棘手的主题。

您随意使用了“构造函数”、“方法”、“父对象”和“连接”等词,以至于几乎不可能猜出您的意思。另外,代码的第一行有语法错误,第二行已经很奇怪了。请花点时间更好地解释自己。@jrsala编辑了我的文章。这能更好地解释吗?我明白你的意思,但你必须学会更好地表达自己,因为你所说的仍然是荒谬的。无论如何,在定义构造函数之前,您不能
new
该构造函数,因此您可以做的是等待它被定义,以便在
onResize
中使用它创建对象。请修复代码中的语法错误。@jrsala修复了示例代码。我很想知道为什么我的新问题没有得到很好的阐述。请让我知道,这样这些错误就不会再次发生。您没有修复示例代码<代码>新事物x(参数)不是有效的JavaScript,它不会在任何地方运行。从
new example.i()
中删除
new
是件好事,因为只包含
new
结构的语句永远不会出现。如果你能向我们解释你试图解决的确切问题,我们可以用不那么笼统、对你更有用的术语来回答。这必须是自上而下的吗?事实上,我需要的是另一种方式。我知道有些库以某种方式做到了这一点。javascript变量总是被提升到作用域的顶部,但这并不意味着它们是被定义的。要运行“new Foo()”时,必须定义Foo。我不应该说总是编辑,因为不同的JS环境可能会有不同的行为differently@teaflavoredgwg是对的,如果没有立即将Foo分配给变量,则在它被
新建之前,不必在代码中定义它。@jrsala您能详细说明一下吗?new关键字是为函数保留的,如果没有定义Foo(不是函数),那么如何对其调用new。@请参阅gwg的链接。形式为
Function f(){/**/}
的函数定义也将被提升,但没有立即赋值(no
var func=Function f(){/**/}
)。您可以编写以下代码,它将是有效的:
var obj=new Foo();函数Foo(){this.x=2;}
Im已经能够构建插件了,但我似乎混淆了术语,这大大降低了我与其他开发人员通信的能力。我不知道为什么会这样。不知怎的,这让我很烦恼。也许是因为我是OOP新手。混淆术语=>混淆概念。沟通是其中的一部分,但要意识到这可能是一个更大的问题。你是绝对正确的。你刚才给我看的那本书真的很棒。我今天要买这个等等,我可以一直做window.addEventListener('resize',onResize);onResize();加载页面时调用Resize。因此,到那时它应该被定义。