mootools 1.2.5 doc说: 自定义Object({})实现,在设置,获取或迭代时不考虑原型。有用,因为在JavaScript中,我们不能使用Object.prototype。相反,我们可以使用Hash.prototype!
但我不明白,请举一些例子来说明我们如何从Hash中受益。
答案 0 :(得分:1)
首先,在MooTools 1.3中,Hash
已被弃用,而不是Object
。
MooTools Object
为Object
添加了一些非常有用的方法。有关prototypes
的信息与高级用法相关,但在使用MooTools Object
时,大多数情况下您无需担心此问题。
以下是MooTools为Object
添加的一些有用方法:
// each
// alerts 'The first day of the week is Sunday',
// 'The second day of the week is Monday', etc.:
Object.each(
{first: 'Sunday', second: 'Monday', third: 'Tuesday'},
function(value, key){
alert('The ' + key + ' day of the week is ' + value);
});
// map
var myObject = {a: 1, b: 2, c: 3};
var timesTwo = Object.map(timesTwo, function(value, key){
return value * 2;
}); // timesTwo now holds an object containing: {a: 2, b: 4, c: 6};
// filter
var myObject = {a: 10, b: 20, c: 30};
var biggerThanTwenty = Object.filter(myObject, function(value, key){
return value > 20;
}); // biggerThanTwenty now holds an object containing: {c: 30}
(以上示例以及来自MooTools docs的更多内容)
答案 1 :(得分:0)
@bowsersenior提供的示例来自1.3,其中mootools弃用了Hash而支持扩展Object类型但是由于你谈到了1.2.5文档,我还是会回复。
1.2.x中Hash最有用的功能是能够创建可以原型化的类似对象的结构。
我回答了一下这个主题,给出了类似的例子:Is there an jQuery equivalent of MooTools Hash?
当谈到1.3 w / o兼容模式时,你仍然可以通过Object.implement()
定义自定义对象方法,但它略有不同,因为this
不是对象,并且总是需要调用Object.yourCustomMethod(yourobj, callbackFunction)
。
答案 2 :(得分:0)
Hash存在的原因是因为实现方法是Object.prototype是非常非常糟糕的做法,因为它会破坏你的应用程序。
Hash可以使用Hash.prototype,例如:
new Hash({my: 'nice', literal: 'object'}).filter(someFunction).map(function(value){
return value + ' sfsdf ';
}).getValues();
您可以使用Hash.implement
添加自己的方法,这实际上会为Hash.prototype添加方法。
因为新的ECMAScript 5规范有很多Object. *函数,比如Object.keys,MooTools 1.3现在使用这些函数而不是Hash。
var obj = {my: 'nice', literal: 'object'}
Object.values(Object.map(Object.filter(obj, someFunction), function(value){
return value + ' sfsdf ';
}));
在这个例子中可能更加冗长,但更符合ES5。 如果你真的喜欢Hash,你仍然可以在MooTools More 1.3中使用它们。
请注意,您可以像上面的Object示例一样使用Hash,所以:
var values = Hash.getValues({my: 'nice', literal: 'object'});