Javascript 我不明白

Javascript 我不明白,javascript,mootools,Javascript,Mootools,mootools 1.2.5文件规定: 一种自定义对象({})实现,在设置、获取或迭代时不考虑原型。非常有用,因为在JavaScript中,我们不能使用Object.prototype。相反,我们可以使用Hash.prototype 但是我不明白,请给我一些例子来说明我们如何从哈希中获益。首先,Hash已经被弃用,取而代之的是MooTools 1.3中的对象 MooToolsObject为Object添加了一些非常有用的方法。关于原型的信息与高级使用相关,但在大多数情况下,当您使用MooTool

mootools 1.2.5文件规定: 一种自定义对象({})实现,在设置、获取或迭代时不考虑原型。非常有用,因为在JavaScript中,我们不能使用Object.prototype。相反,我们可以使用Hash.prototype


但是我不明白,请给我一些例子来说明我们如何从哈希中获益。

首先,
Hash
已经被弃用,取而代之的是MooTools 1.3中的
对象

MooTools
Object
Object
添加了一些非常有用的方法。关于
原型
的信息与高级使用相关,但在大多数情况下,当您使用MooTools
对象
时,无需担心

以下是MooTools添加到
对象中的一些有用方法:

// 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 1.3中,
Hash
已被弃用,取而代之的是
对象

MooTools
Object
Object
添加了一些非常有用的方法。关于
原型
的信息与高级使用相关,但在大多数情况下,当您使用MooTools
对象
时,无需担心

以下是MooTools添加到
对象中的一些有用方法:

// 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}

(上面的例子和更多来自的例子)

@Bowservisior提供了来自1.3的例子,其中mootools不赞成使用Hash来扩展对象类型,但既然您谈到了1.2.5文档,我还是会回答

在1.2.x中,Hash最有用的功能是能够创建类似对象的结构,这些结构可以是原型

我不久前回答了这个问题,给出了类似的例子:


当谈到1.3 w/o兼容模式时,您仍然可以通过
Object.implement()
来定义自定义对象方法,但这与
略有不同,因为
这个
不是对象,总是需要调用
对象。yourCustomMethod(yourobj,callbackFunction)

@bowsersenior提供了1.3版本的示例,其中mootools不推荐使用Hash来扩展对象类型,但既然您提到了1.2.5版本的文档,我还是会回答

在1.2.x中,Hash最有用的功能是能够创建类似对象的结构,这些结构可以是原型

我不久前回答了这个问题,给出了类似的例子:


当谈到1.3 w/o兼容模式时,您仍然可以通过
Object.implement()
来定义自定义对象方法,但这与
略有不同,因为
这个
不是对象,总是需要调用
对象。yourCustomMethod(yourobj,callbackFunction)

哈希存在的原因是因为实现方法是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现在使用这些函数而不是散列函数

var obj = {my: 'nice', literal: 'object'}
Object.values(Object.map(Object.filter(obj, someFunction), function(value){
    return value + ' sfsdf ';
}));
在本例中可能会更详细一些,但更符合ES5。 如果你真的喜欢Hash,你仍然可以在mootoolsmore1.3中使用它们

请注意,您可以像上面的对象示例一样使用哈希,因此:

var values = Hash.getValues({my: 'nice', literal: 'object'});

哈希存在的原因是因为实现方法是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现在使用这些函数而不是散列函数

var obj = {my: 'nice', literal: 'object'}
Object.values(Object.map(Object.filter(obj, someFunction), function(value){
    return value + ' sfsdf ';
}));
在本例中可能会更详细一些,但更符合ES5。 如果你真的喜欢Hash,你仍然可以在mootoolsmore1.3中使用它们

请注意,您可以像上面的对象示例一样使用哈希,因此:

var values = Hash.getValues({my: 'nice', literal: 'object'});