Javascript抱怨方法在确实定义时未定义

时间:2014-07-13 05:06:21

标签: javascript function public

这可能是一个非常容易的问题。我仍在学习javascript,希望我能为下面的问题寻求帮助。

var hello = function()
{
    this.hey = function()
    {
        console.log("hey");
    }
    function init()
    {
        this.hey();
    }
    init();
}
var h = new hello();

上面的代码抱怨没有定义hey的方法。 但是如果我做的话

var h = hello();

它没有提出任何问题。

为什么第一个用new创建一个对象给了我错误但第二个没有?我需要创建对象,因此我需要使用new关键字。如何解决第一个错误?

1 个答案:

答案 0 :(得分:1)

当您使用hello调用new方法时,它会创建hello function/class的新实例,您将获得this作为上下文hello function

 var hello = function () {
     // this is an instance of hello class
     this.hey = function () {
         console.log("hey");
     }

     var _this = this; // creating this context of hello
     function init() {
         // this is a context of window here
         //this.hey(); // throws an error
         _this.hey(); // will execute
     }
     init();
 }
 var h = new hello(); // create a new instance/object of hello

然而,当您只是将其称为函数hello()时,您将在window内获得hello function个上下文。

var hello = function () {
     // this is a context of window here
     this.hey = function () {
         console.log("hey");
     }

     function init() {
         // this is a context of window here
         this.hey(); // will execute
     }
     init();
 }
 var h = hello(); // calling a hello function

JSFIDDLE DEMO:http://jsfiddle.net/8QN7W/