首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript -对象文字的优点

JavaScript -对象文字的优点
EN

Stack Overflow用户
提问于 2009-10-21 19:06:23
回答 4查看 24.3K关注 0票数 38

我已经读过了,我应该使用对象字面,而不是简单地编写一堆函数。

有没有人能用例子解释一下对象字面量的优点,因为到目前为止我还不明白。

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-21 19:25:41

正如Russ Cam所说,避免污染全局命名空间,这在如今组合来自多个位置(TinyMCE等)的脚本时非常重要。

正如Alex Sexton所说,它也有助于良好的代码组织。

如果您正在使用这种技术,我建议您使用模块模式。这仍然使用对象字面量,但作为作用域函数的返回值:

代码语言:javascript
运行
复制
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
    };
})();

外部使用:

代码语言:javascript
运行
复制
MyThingy.doSomethingCool();

作用域函数被包装在所有函数周围,然后立即调用它并存储它的返回值。优势:

  • 函数是正常声明的,因此具有名称。(而对于{name: function() { ... }}格式,所有函数都是匿名的,即使引用它们的属性有名称。)名称帮助工具可以帮助您,从在调试器中显示调用堆栈到告诉您哪个函数抛出异常。(2015年更新:最新的JavaScript规范,ECMAScript第6版,定义了JavaScript引擎必须推断函数名称的大量方法。其中之一是当函数被赋值给一个属性时,如我们的{name: function() { ... }}示例所示。因此,当引擎实现ES6时,这个理由将不复存在。)
  • 让您可以自由地让私有函数仅供您的模块使用(如上面的internalSomething )。页面上的任何其他代码都不能调用这些函数;它们是真正私有的。只有您在返回语句末尾导出的函数在作用域function.
  • Makes之外可见,如果实现完全更改(例如IE- vs -W3C或SVG等),根据环境很容易返回不同的函数。

返回不同函数的示例:

代码语言:javascript
运行
复制
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 */);
票数 66
EN

Stack Overflow用户

发布于 2009-10-21 19:07:57

使用对象文字(也称为对象文字模式)将不会像使用许多全局声明的函数那样严重污染全局命名空间,并且还有助于以逻辑方式组织代码

例如,此对象文字

代码语言:javascript
运行
复制
var obj = {
              find : function(elem) { /* find code */ },
              doSomething: function() { /* doSomething code */ },
              doSomethingElse: function() { /* doSomethingElse code */ }
          }

代码语言:javascript
运行
复制
function find(elem) { /* find code */ },
function doSomething() { /* doSomething code */ },
function doSomethingElse() { /* doSomethingElse code */ }

将只在全局对象上创建一个属性,而不是三个。然后,您可以很容易地使用下面的函数

代码语言:javascript
运行
复制
obj.doSomething();
票数 15
EN

Stack Overflow用户

发布于 2009-10-21 19:09:23

Rebecca Murphey在今年的jQuery会议上做了一个关于对象字面量的演讲。使用它们的一个最好的原因就是良好的代码组织。

下面是Rebecca关于Object文字模式的文章:http://rmurphey.com/blog/2009/10/15/using-objects-to-organize-your-code/

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1600130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档