2014-01-25 79 views
0

我想在我的情况下初始化一个方法。我有一些像JavaScript对象初始化问题

var test = new testObj() 

function testObj(){ 
     this.init(); 
    } 

testObj.prototype.init = function(){   
    //do something 
} 

不过,我从控制台得到testObj has no method of init错误。

我不确定会发生什么。有人可以帮我解决这个问题吗?非常感谢!

+0

老百姓为什么downvote抢原型.. ..这是一个真正的问题完全有效的问题 –

回答

3

那是因为你的脚本的顺序

function testObj() { 
    console.log(this) 
    this.init(); 
} 

testObj.prototype.init = function() { 
    //do something 
} 

var test = new testObj(); 

函数声明会得到hoisted到申报范围的顶端,所以你可以创建一个新的testObj实例,但原型的增强有当构造函数被调用时不会发生,所以你不会得到init方法。

吊装代码可能看起来像下面后,在执行new testObj(),它调用构造函数,但init方法没有被添加到testObj

function testObj() { 
    console.log(this) 
    this.init(); 
} 

var test = new testObj(); 

testObj.prototype.init = function() { 
    //do something 
} 
+1

哦,男孩..我的大脑已经死了。我什至不知道这一点。谢谢您的帮助 – FlyingCat