Я не понимаю хэш mootools - PullRequest
       3

Я не понимаю хэш mootools

1 голос
/ 29 декабря 2010

mootools 1.2.5 doc гласит: Пользовательская реализация Object ({}), которая не учитывает прототипы при установке, получении или повторении.Полезно, потому что в JavaScript мы не можем использовать Object.prototype.Вместо этого мы можем использовать Hash.prototype!

Но я не понимаю этого, приведите пример, чтобы показать, как мы можем извлечь выгоду из Hash.

Ответы [ 3 ]

1 голос
/ 29 декабря 2010

Во-первых, Hash устарел в пользу Object в MooTools 1.3.

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 )

0 голосов
/ 29 декабря 2010

Причина существования 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.

Обратите внимание, что вы можете использовать Hash точно так же, как в примере с объектом выше, поэтому:

var values = Hash.getValues({my: 'nice', literal: 'object'});
0 голосов
/ 29 декабря 2010

@ bowsersenior предоставил примеры из 1.3, в которых mootools устарели в Hash в пользу расширения типа Object, но поскольку вы говорите о документах 1.2.5, я все равно отвечу.

Самой полезной особенностью Hash в 1.2.x была возможность создавать объектоподобные структуры, которые могут быть прототипированы.

Я недавно ответил на эту тему, приведя похожие примеры: Существует ли jQuery-эквивалент MooTools Hash?

Когда дело доходит до 1,3 без режима совместимости, вы все равно можете определять пользовательские методы объекта с помощью Object.implement(), но это немного отличается тем, что this не является объектом и всегда требует вызова Object.yourCustomMethod(yourobj, callbackFunction) ,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...