Прототипне програмування: відмінності між версіями

[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
Luckas-bot (обговорення | внесок)
м робот додав: de, en, es, fr, ja, ko, th, tr
Рядок 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]]. До того ж, так як прототип-орієнтовані системи є порівняно новими і все ще нечисленними і рідкісними, прийоми розробки з їх використанням досі не отримали великого поширення.
 
== Мови ==