我读过,而不是简单地写了一堆的功能,我应该使用对象文本。
有人能解释对象的字面优点是举例,因为我不迄今理解。
谢谢
我读过,而不是简单地写了一堆的功能,我应该使用对象文本。
有人能解释对象的字面优点是举例,因为我不迄今理解。
谢谢
正如拉斯凸轮说,你避免污染全局命名空间,这是从多个位置(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
以上)。 网页上没有任何其他的代码可以调用这些函数; 他们是真正私有的。 只有你在导出结束,在返回语句中的人,是作用域函数外可见。 返回不同的功能的例子:
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 */);
使用对象文本(又名对象面值模式)将不作为严重污染全局命名空间为使用全局声明将许多功能,也有助于在一个符合逻辑的方式来组织代码
例如,该对象常量
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();
丽贝卡·墨菲没有在今年的jQuery的会议对象文本谈话。 一个使用它们的最佳理由就是良好的代码组织。
这里是关于对象面值模式丽贝卡的写了起来: http://rmurphey.com/blog/2009/10/15/using-objects-to-organize-your-code/
我总是使用对象文本,因为他们是组织代码一条明路。 这就是为什么我不喜欢的原型,它是太乱了。
如上面有人比对象文本更多提到的功能不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简单地引用原型。
我可能是错的,当然...