2013-11-04 108 views
0

让我介绍与短代码这个问题,我在这里:如何init()函数在这种情况下工作

function SomeObject() { 
// Personaly I call this part initialization... 
this.anything = "anything"; 

// ... but here somebody call function init... 
this.init(); 
} 

// ... which is declared there... 
SomeObject.prototype.init = function() { 

// ... and contains more initialization. 

} 

现在问题来了: 这是否执行初始化函数的有什么好处?

我看到的唯一好处是,您可以稍后使用init函数并重新初始化其某些属性和其他内容。但是在我的代码中,没有这样做的意义。更重要的是,如果我这样做,它会打破很多东西。 从那时起,我不知道是否有此实现旁任何区别:

function SomeObject() { 
    init.call(this); 
} 

function init() {   
} 

而且我不知道任何振振有辞为什么要构造分成多个部分。所以我认为(有这种感觉),我真的不得不错过一些重要的好处或自然。

回答

0

简短的答案是“OOP”。

在第二种情况下,您必须使用call来提供上下文,并且您没有提示该函数将用于SomeObject的实例。当然,这个功能并没有被继承。

对于像这样的“私人”功能,它并不重要,特别是如果它仅用于构造函数(那么,它是一个真正需要的功能?)。但是,如果函数必须从代码的其他部分使用,将函数附加到必须作为调用上下文的对象上才能使目标更加清晰。

+0

我可以封装SomeObject和init与IIF。然后很容易认识到这些属于一起。那么你认为应该避免使用通话吗?或者你的回答意味着它并不重要,应该逐案解决。 –

+0

如果'init'仅从构造函数中调用,并且没有其他函数附加到原型,则无关紧要。如果您还有其他功能附加到原型上,那么添加这个功能可以更容易地识别代码的结构。这就是说,我不会推荐在JavaScript中过度使用OOP:它往往是冗长的。 –

相关问题