Как я вставляю промежуточные кадры в Java? [закрытый]

Здесь есть две разные, но связанные сущности, которые требуют объяснения:

  • Свойство .prototype функций.
  • Свойство [[Prototype]] [1] sup> sup> всех объектов [2] sup> sup>.

Это две разные вещи.

Свойство [[Prototype]]:

Это свойство существует для всех объектов [2] sup> sup>.

Здесь хранится еще один объект, который, как сам объект, имеет свое собственное [[Prototype]], которое указывает на другой объект. Этот другой объект имеет [[Prototype]] своих собственных. Эта история продолжается до тех пор, пока вы не достигнете прототипа объекта, который предоставляет методы, доступные для всех объектов (например, .toString ).

Свойство [[Prototype]] является частью того, что образует цепочку [[Prototype]]. Эта цепочка объектов [[Prototype]] проверяется, например, когда над объектом выполняются операции [[Get]] или [[Set]]:

var obj = {}
obj.a         // [[Get]] consults prototype chain
obj.b = 20    // [[Set]] consults prototype chain

Свойство .prototype:

Это свойство встречается только в функциях. Используя очень простую функцию:

function Bar(){};

Свойство .prototype содержит объект , который будет присвоен b.[[Prototype]], когда вы сделаете var b = new Bar. Вы можете легко проверить это:

// Both assign Bar.prototype to b1/b2[[Prototype]]
var b = new Bar;
// Object.getPrototypeOf grabs the objects [[Prototype]]
console.log(Object.getPrototypeOf(b) === Bar.prototype) // true

Одним из наиболее важных .prototype является то, что функции Object . Этот прототип содержит прототипный объект, содержащийся во всех цепочках [[Prototype]]. На нем определены все доступные методы для новых объектов:

// Get properties that are defined on this object
console.log(Object.getOwnPropertyDescriptors(Object.prototype))

Теперь, поскольку .prototype является объектом, он обладает свойством [[Prototype]]. Когда вы не делаете никаких назначений для Function.prototype, .prototype [[Prototype]] указывает на прототипный объект (Object.prototype). Это автоматически выполняется каждый раз, когда вы создаете новую функцию.

Таким образом, каждый раз, когда вы делаете new Bar; цепочку прототипов, вы получаете все, что определено в Bar.prototype, и все, что определено в Object.prototype:

var b = new Bar;
// Get all Bar.prototype properties
console.log(b.__proto__ === Bar.prototype)
// Get all Object.prototype properties
console.log(b.__proto__.__proto__ === Object.prototype)

Когда вы делаете присваиваете Function.prototype все, что вы делаете, это расширяете цепочку прототипов для включения другого объекта. Это как вставка в односвязный список.

Это в основном изменяет цепочку [[Prototype]], позволяя свойствам, которые определены для объекта, назначенного Function.prototype, быть видимым любым объектом, созданным функцией.


[1: Это никого не смущает; доступно через свойство __proto__ во многих реализациях. sup>
[2]: Все, кроме null . sup >

12
задан vaxquis 12 February 2015 в 13:24
поделиться

1 ответ

Временная структура - это то, что, я думаю, вы ищете.

Также я могу рекомендовать книгу Filthy Rich Clients , если вы ее пишете богатые приложения.

Альтернативой является также jgoodies: Библиотека анимации

4
ответ дан 2 December 2019 в 19:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: