使用子方法可以实现功能吗?

时间:2012-01-18 07:37:55

标签: javascript object

这种东西适用于JavaScript

function main() {
    return 1;
}
main.sub = function () {
    return 2;
};

main();     // 1
main.sub(); // 2

似乎对做

之类的东西很有用
function props() {
    return { color: props.color(), size: props.size() };
}
props.color = function () {
    // calculate and return color
};
props.size = function () {
    // calculate and return size
};

这样您就可以使用prop()轻松获取所有道具的对象,但如果您只需要一个,则可以直接调用它。这种设置好吗?

3 个答案:

答案 0 :(得分:2)

即使它绝对合法,我也说它是子方法的错误利用。它将函数与所述函数的返回值混淆。

我想说在函数中正确使用子方法就是为函数添加元数据。让我们假设您要为文档中的函数设置属性,或者是否要对其进行模糊处理。然后,您可以设置函数的属性而不是基础对象。

即使您的使用可能会节省一些写作,但它使得阅读代码更加困难恕我直言。你应该始终努力方便阅读,而不是写作。

答案 1 :(得分:1)

这看起来很有用,但使用它时发生的情况并不是很明显。

表达式props.color()返回与相似表达式props().color相同的表达式,但性能不同,因为后者还计算其他属性,然后将其丢弃。在没有注意的情况下很容易滥用该功能,因此您应该考虑使用一种方法,其中使用情况更清楚地显示代码中实际发生的情况。

答案 2 :(得分:1)

一般来说,这可能不是一个好习惯:

致电:props.color();将与调用props().color完全相同。

什么是更好的模式将是如下:

var props = function() {
 var theColor = function() {
  // calculate the color
 };

 var theSize = function() {
  // calculate the size
 };

 return {
  color: theColor(),
  size: theSize()
 }
}

var someprops = new props();

你可以不用例如theColor()作为颜色的对象,你可以把它留作函数:所以返回将是

return {
 color: theColor,
 size: theSize
}

区别在于props.color == "function"而前一个例子中props.color将等于函数的结果。