2015-09-18 138 views
-1

我刚刚学过OOP,并且有一件事我无法解决。问题是某种范围问题。如果构造函数在另一个函数内,新创建的对象调用构造函数undefined

如果我创建一个新对象,那么如果构造函数在另一个函数内部,我将如何能够访问我的构造函数?现在我弄不明白。将函数存储在全局变量中不会完成这项工作。

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

你偶然使用“构造函数”,“方法”,“父母”和“连接”这几个字,甚至几乎不可能开始猜测你的意思。另外,你的代码在第一行有语法错误,第二行已经很奇怪了。请花点时间来更好地解释你自己。 – jrsala

+0

@jrsala编辑我的帖子。这是否解释得更好? – Asperger

+3

我明白你的意思,但你必须学会​​更好地表达自己,因为你所说的话仍然是荒谬的。无论如何,在函数被定义之前,你不能'new'构造函数,所以你可以做的是等待它被定义,以便在'onResize'内部创建你的对象。并请修复代码中的语法错误。 – jrsala

回答

0

对于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 
    } 
) 
+0

它是否必须是从上到下?我实际上需要另一种方式。我知道有些图书馆设法以某种方式做到这一点。 – Asperger

+0

JavaScript变量总是被悬挂到范围的顶部,但这并不意味着它们已被定义。在你想运行'new Foo()'时,必须定义Foo。编辑我不应该总是说,因为不同的JS环境可能会有不同的表现 – teaflavored

+0

看到这个答案:http://stackoverflow.com/a/3344397/1830334 – gwg

0

如果我了解你,你想知道如何访问另一个函数中的变量。您的尝试是合理的,但请注意,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的基本概念。你的代码和术语都是草率的。我建议Secrets of the JavaScript Ninja。它很好地解释范围和函数,这是JavaScript中两个棘手的主题。

+0

我已经能够构建插件,但似乎我混淆了术语,这大大降低了我与其他开发人员沟通的能力。我不知道为什么会发生这种情况。它以某种方式困扰我。也许是因为我是OOP的新手。 – Asperger

+0

混合术语=>混淆概念。沟通是其中的一部分,但是要意识到这可能是一个更大的问题。 – gwg

+1

你是绝对正确的。你刚才给我看的书真的很棒。我会在今天买这个 – Asperger

相关问题