函数与对象文字表示法 - 有区别吗?

时间:2012-04-09 20:38:28

标签: javascript

这两种方式都使用相同的呼叫机制。

显然,我想用最好的方法,但也许这只是一个偏好的问题?

样式方面我喜欢Object Literal Notation,因为它提供了外壳。

功能表示法:

var TextProcessor = function()
{
};
TextProcessor.unEscape = function( second_split )
{
    var element;
    for( element in second_split )
    {
        second_split[element] = second_split[element].replace( '**', '*', 'g' );
        second_split[element] = second_split[element].replace( '|*', '|', 'g' );
    }
    return second_split;
};
TextProcessor.pullBullet = function( text )
{
    var pattern = /<(.+)_([a-z]){1}>$/;
    return pattern.exec( text );
};
TextProcessor.pullDomain = function( text )
{
    return text.match( /:\/\/(www\.)?(.[^\/:]+)/ )[2];
};

对象文字符号

/**
 *TextProcessor
 */

var TextProcessor = 
{
    unEscape:    function( text )
    {
        var index;
        for( index in second_split )
        {
            text[index] = text[index].replace( '**', '*', 'g' );
            text[index] = text[index].replace( '|*', '|', 'g' );
        }
        return second_split;
    },
    pullBullet:  function( text )
    {
        var pattern = /<(.+)_([a-z]){1}>$/;
        return pattern.exec( text );
    },
    pullDomain:  function( text )
    {
        return text.match( /:\/\/(www\.)?(.[^\/:]+)/ )[2];
    }
}

1 个答案:

答案 0 :(得分:5)

你做了两件不同的事情。

  • 第一个示例创建一个函数对象并为其分配属性。

  • 第二个示例创建一个包含这些属性的普通对象。

第一个在你的例子中确实没有多少实际意义。您可以使用函数对象来分配属性,但为什么会这样?这些属性对函数的调用没有影响。


  

“样式方面我喜欢Object Literal表示法,因为它提供了外壳。”

我不知道“enclosure”是什么。它听起来像封装和闭包的组合,对象文字也没有提供。


回到第一部分,想象一下你是否创建了这些对象中的任何一个......

var TextProcessor = new Number();
var TextProcessor = new Boolean();
var TextProcessor = new Date();

...然后为其分配属性。它会起作用,但这样做会很奇怪。对象为NumberBooleanDate的事实与手头的任务几乎无关。

当你将属性分配给Function对象时,这就是你正在做的事情。