Прототипне програмування: відмінності між версіями
[неперевірена версія] | [неперевірена версія] |
Вилучено вміст Додано вміст
м робот додав: de, en, es, fr, ja, ko, th, tr |
Deineka (обговорення | внесок) |
||
Рядок 26:
Інший недолік в тому, що найпростіші реалізації цієї моделі призводять до збільшеної (в порівнянні з моделлю делегування) витрати пам'яті, тому що кожен клон, поки він не змінений, буде містити копію даних свого прототипу. Однак ця проблема розв'язана оптимальним поділом незмінених даних і застосуванням «ледачого копіювання» - що й було використано в Kevo.
== Приклад ==
<source lang="javascript">
//Приклад прототипеого стилю успадкування в JavaScript
//"з нуля" об'єкт створюється із застосуванням буквеної нотації JSON {}.
var foo = {one: 1, two: 2};
//інший об'єкт "з нуля"
var bar = {three: 3};
// Рушії Gecko і Webkit JavaScript можуть прямо маніпулювати прототипними зв'язками
// для простоти, припустимо, що наступний рядок працює незалежно від використуваного рушія:
bar.__proto__ = foo; // bar наразі є нащадком foo.
//тепер ми можемо із bar доступитися до властивостей foo
bar.one // це дає 1.
//об'єкт-нащадок звісно зберігає і свої властивості
bar.three // тут лишається 3.
</source>
== Критика ==
Рядок 34 ⟶ 54:
У частині ефективності, оголошення класів значно спрощує [[компілятор]]у завдання оптимізації, роблячи ефективнішими як методи, так і пошук атрибутів у примірниках. У випадку мови Self чимала частина часу була витрачена на розробку таких технік компіляції та інтерпретації, які дозволили б наблизити продуктивність прототип-орієнтованих систем до їхніх клас-орієнтованих конкурентів.
Нарешті, можливо найзагальнішим місцем критики проти прототипного програмування є те, що співтовариство розробників ПЗ недостатньо добре знайоме з ним, незважаючи на популярність і поширеність [[JavaScript]]. До того ж, так як прототип-орієнтовані системи є порівняно новими і все ще нечисленними і рідкісними, прийоми розробки з їх використанням досі не отримали великого поширення.
== Мови ==
|