Подтвердить что ты не робот

Javascript: Построение объектов

Я немного javascript noob, но у меня есть общий вопрос, который меня беспокоил. Возьмем пример:

Если я перейду в консоль JS в Chrome, я могу легко просмотреть объект window. window, кажется, перечисляет много "типов классов", так сказать. Например, window.CSSPrimitiveValue является одним из таких свойств. Когда я оцениваю window.CSSPrimitiveValue в консоли, я возвращаю то, что выглядит как конструктор (возможно):

function CSSPrimitiveValue() { [native code] }

Итак, похоже, что функция была реализована на каком-то родном языке. Не важно. Естественно, я хочу построить одну из следующих вещей:

var test = new CSSPrimitiveValue();

Но потом я получаю сообщение об ошибке:

TypeError: Illegal constructor

Я подозреваю, что либо я вызываю конструктор неправильно, либо вообще не является конструктором. Я довольно большой JS noob об этом, но есть ли способ для меня вручную создать один из этих объектов? Каким будет метод для этого?

4b9b3361

Ответ 1

Любая функция, написанная в JavaScript, может быть конструктором при вызове с использованием ключевого слова new. Как вы уже заметили, функция, с которой вы имеете дело, является родной, то есть написана на C или С++ (возможно, С++, поскольку движок JavaScript Chrome написан на С++ тоже). Родные функции/объекты могут иметь определенное поведение, такое как ваш случай, когда вы не можете использовать его в качестве конструктора - там вы ничего не можете сделать.

В этой "функции" нет даже метода .call(), вы также не можете вызывать его на ранее созданном вами объекте (не так, чтобы это было очень полезно, поскольку у него не было бы правильного [[Prototype] ] set)