Я пытаюсь узнать Mootools, прочитав источник, и я не понимаю, почему это делает локальную копию функции:Mootools код объяснение
var Function = this.Function;
, но почему он не делает локальную копию массива , Number и String, чтобы сделать то же самое, например, они сначала появляются, когда они непосредственно назначены, так почему же обрабатывать функцию по-другому?
Function.from = function(item){
return (typeOf(item) == 'function') ? item : function(){
return item;
};
};
Array.from = function(item){
if (item == null) return [];
return (Type.isEnumerable(item) && typeof item != 'string') ? (typeOf(item) == 'array') ? item : slice.call(item) : [item];
};
Number.from = function(item){
var number = parseFloat(item);
return isFinite(number) ? number : null;
};
String.from = function(item){
return item + '';
};
Также я не понимаю, как в строке 149 Функция вызывает функцию реализации, которая хранится в ее собственном свойстве прототипа?
Function.implement({
hide: function(){
this.$hidden = true;
return this;
},
protect: function(){
this.$protected = true;
return this;
}
});
Это потому, что функция является функцией, поэтому ее внутренний [[прототип]] является Function.prototype?
Что касается вашего обновления для строки 149, это потому, что 'реализация' находится на' Function.prototype', что автоматически делает его доступным для всех функций, которые имеют функцию Function.prototype в своей цепочке прототипов. Сюда входят функции конструктора, включая конструктор 'Function'. –
Сделайте это ... 'Function.prototype === Object.getPrototypeOf (Function)', и вы увидите, что экземпляр 'Function' имеет свой собственный объект prototype в своей цепочке прототипов. Вы получите тот же результат для создаваемых функций ... 'Function.prototype === Object.getPrototypeOf (function() {})' http://es5.github.com/#x15.3.3 –
hide/protect являются декораторами функций, которые используются классом - они позволяют методам стать «частными», поскольку все свойства функций в объекте конструктора класса «завернуты», и если защищенный флаг включен, он не позволит ему называться извне и т. д. эти декораторы не имеют никакого смысла вне самого класса. Проверьте типы 'MooTools' - например. https://github.com/mootools/mootools-core/blob/master/Source/Types/Function.js –