1. Очень хотелось бы увидеть пояснения, в каких браузерах работают описанные возможности. Насколько я знаю в IE Object.defineProperty и Function.bind работают только с 9 версии.
2. Вы рписываете наследование с использованием Object.create. Поясните, пожалуйста, отличие наследования с применением Object.create от наследования с использованием конструкторов:
function A() {
this.x = 10;
}
A.prototype = {
constructor: A,
y: 100
};
var a = new A();
a.x; // 10
a.y // 100 (из прототипа)
На практике встречаю только способ наследования через конструкторы.
3. Вы пишете:
>>> Пустой объект — это объект без родителя, без свойств. Посмотрим на синтакс создания такого объекта в JavaScript:
>>> var mikhail = Object.create(null)
Что вижу я в Firebug:
Проект необходимо всё время поддерживать, это верно, но в любом более-менее серьёзном проекте необходимо минимизировать риски. В связи с этим стараюсь не использовать расширение встроенных прототипов методами, не описаннными в специффикации.
Вы хотите сказать, что все используемые в библиотеке методы описаны в спецификации?
Может случиться такая ситуация в большом проекте, когда кодовая база на клиентской части стала достаточно объёмной и вдруг появляется встроенный метод, поведение которого отличается от поведения, добавляемого библиотекой, отчего сыпется всё приложение. В таком случае необходимо срочно заняться рефакторингом кода в проекте, что может сорвать планы и неблагоприятно повлиять на бюджет…
Сравнение ассемблера с высокоуровниевыми языками совершенно неуместно, т к разница между яваскриптом и появляющимися обертками, которые транслируются в яваскрипт, не настолько велика.
Обычно основная проблема кроется в реализации ООП-подхода в яваскрипте, потому как там вместо обычной классовой модели используется делегирующее наследование на базе прототипов.
На мой взгляд лучше освоить прототипы (что не так уж и сложно, вопреки мнению большинства) и разрабатывать на нативном языке, а не плодить уровни абстракций, которые так любят протекать…
Спасибо за пояснения.
А можете 3-й пункт прояснить? То что создается с помощью Object.create ( []{} ) не похоже на обычный объект ( {} ). А typeof говорит что объект.
2. Вы рписываете наследование с использованием Object.create. Поясните, пожалуйста, отличие наследования с применением Object.create от наследования с использованием конструкторов:
На практике встречаю только способ наследования через конструкторы.
3. Вы пишете:
>>> Пустой объект — это объект без родителя, без свойств. Посмотрим на синтакс создания такого объекта в JavaScript:
>>> var mikhail = Object.create(null)
Что вижу я в Firebug:
Можете пояснить подобное поведение?
Может случиться такая ситуация в большом проекте, когда кодовая база на клиентской части стала достаточно объёмной и вдруг появляется встроенный метод, поведение которого отличается от поведения, добавляемого библиотекой, отчего сыпется всё приложение. В таком случае необходимо срочно заняться рефакторингом кода в проекте, что может сорвать планы и неблагоприятно повлиять на бюджет…
Был бы безумно рад, если из jQuery выпилят всю лишную функциональность, которая не относится к работе с DOM.
Обычно основная проблема кроется в реализации ООП-подхода в яваскрипте, потому как там вместо обычной классовой модели используется делегирующее наследование на базе прототипов.
На мой взгляд лучше освоить прототипы (что не так уж и сложно, вопреки мнению большинства) и разрабатывать на нативном языке, а не плодить уровни абстракций, которые так любят протекать…