-->

JavaScript的 - 对象文本的优势JavaScript的 - 对象文本的优势(JavaScr

2019-05-12 16:45发布

我读过,而不是简单地写了一堆的功能,我应该使用对象文本。

有人能解释对象的字面优点是举例,因为我不迄今理解。

谢谢

Answer 1:

正如拉斯凸轮说,你避免污染全局命名空间,这是从多个位置(TinyMCE的,等等)合并脚本的这几天非常重要的。

亚历克斯说:塞克斯顿,它使良好的代码组织为好。

如果你使用这个技术,我建议使用模块模式。 这仍然使用对象文字,但作为从作用域函数的返回值:

var MyThingy = (function() {

    function doSomethingCool() {
        ...
    }

    function internalSomething() {
        ....
    }

    function anotherNiftyThing() {
        // Note that within the scoping function, functions can
        // call each other direct.
        doSomethingCool();
        internalSomething();
    }

    return {
        doSomethingCool: doSomethingCool,
        anotherNiftyThing: anotherNiftyThing
    };
})();

外用:

MyThingy.doSomethingCool();

作用域功能缠你的所有功能,然后立即把它和存储其返回值。 好处:

  • 功能通常声明,所以有名字 。 (而用{name: function() { ... }}格式,所有的功能都是匿名的,虽然属性引用它们有名字)名称帮助工具帮助你,不再出现在调试器调用堆栈,以告诉你什么函数抛出异常。 (2015年更新:最新的JavaScript规范,ECMAScript的第6版,定义了大量的方式JavaScript引擎必须推断函数名其中之一是当功能被分配给一个属性在我们的{name: function() { ... }}例子。因此,作为发动机实现ES6,因此会自动消失。)
  • 让你只有使用你的模块专用功能(如我的自由internalSomething以上)。 网页上没有任何其他的代码可以调用这些函数; 他们是真正私有的。 只有你在导出结束,在返回语句中的人,是作用域函数外可见。
  • 可以很容易地根据环境而定返回不同的功能,如果实现只是完全改变(如IE-VS-W3C的东西,或SVG与帆布等)。

返回不同的功能的例子:

var MyUtils = (function() {
    function hookViaAttach(element, eventName, handler) {
        element.attachEvent('on' + eventName, handler);
    }

    function hookViaListener(element, eventName, handler) {
        element.addEventListener(eventName, handler, false);
    }

    return {
        hook: window.attachEvent ? hookViaAttach : hookViaListener
    };
})();

MyUtils.hook(document.getElementById('foo'), 'click', /* handler goes here */);


Answer 2:

使用对象文本(又名对象面值模式)将不作为严重污染全局命名空间为使用全局声明将许多功能,也有助于在一个符合逻辑的方式来组织代码

例如,该对象常量

var obj = {
              find : function(elem) { /* find code */ },
              doSomething: function() { /* doSomething code */ },
              doSomethingElse: function() { /* doSomethingElse code */ }
          }

相比

function find(elem) { /* find code */ },
function doSomething() { /* doSomething code */ },
function doSomethingElse() { /* doSomethingElse code */ }

将比较三个全局对象上创建只有一个属性。 然后,您可以轻松的使用功能,像这样

obj.doSomething();


Answer 3:

丽贝卡·墨菲没有在今年的jQuery的会议对象文本谈话。 一个使用它们的最佳理由就是良好的代码组织。

这里是关于对象面值模式丽贝卡的写了起来: http://rmurphey.com/blog/2009/10/15/using-objects-to-organize-your-code/



Answer 4:

我总是使用对象文本,因为他们是组织代码一条明路。 这就是为什么我不喜欢的原型,它是太乱了。

如上面有人比对象文本更多提到的功能不polute名字空间。

你可以很容易地写一个文字像

var obj = {}
var find = function(elem) { /* find code */ },
var doSomething = function() { /* doSomething code */ },
var doSomethingElse = function() { /* doSomethingElse code */ }

这将创造大量的全局对象一样一样的功能polute。 同样,你可以这样做:

(function() {
function find(elem) { /* find code */ },
function doSomething() { /* doSomething code */ },
function doSomethingElse() { /* doSomethingElse code */ }
})();

这不会创建这些全局对象(一切都在JS的对象)

这样,你还是不要创建全局对象的负荷。

在我看来对象文本有两个优点。 他们一个被许多插件,如jQuery的使用,因此人们都熟悉并且,他们很容易阅读。 使它们很容易通过数据传递到一个插件。 这很容易创建公共和私有方法....

他们可能会很慢,虽然因为每次创建所有它的方法被复制的对象的实例。 这是我的理解是不是有原型的情况下,你的方法之一,拷贝和新ojects简单地引用原型。

我可能是错的,当然...



文章来源: JavaScript - Advantages of object literal