我不明白mootools哈希

时间:2010-12-29 08:11:41

标签: javascript mootools

mootools 1.2.5 doc说:     自定义Object({})实现,在设置,获取或迭代时不考虑原型。有用,因为在JavaScript中,我们不能使用Object.prototype。相反,我们可以使用Hash.prototype!

但我不明白,请举一些例子来说明我们如何从Hash中受益。

3 个答案:

答案 0 :(得分:1)

首先,在MooTools 1.3中,Hash已被弃用,而不是Object

MooTools ObjectObject添加了一些非常有用的方法。有关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'});