Javascript: Построение объектов
Я немного javascript noob, но у меня есть общий вопрос, который меня беспокоил. Возьмем пример:
Если я перейду в консоль JS в Chrome, я могу легко просмотреть объект window
. window
, кажется, перечисляет много "типов классов", так сказать. Например, window.CSSPrimitiveValue
является одним из таких свойств. Когда я оцениваю window.CSSPrimitiveValue
в консоли, я возвращаю то, что выглядит как конструктор (возможно):
function CSSPrimitiveValue() { [native code] }
Итак, похоже, что функция была реализована на каком-то родном языке. Не важно. Естественно, я хочу построить одну из следующих вещей:
var test = new CSSPrimitiveValue();
Но потом я получаю сообщение об ошибке:
TypeError: Illegal constructor
Я подозреваю, что либо я вызываю конструктор неправильно, либо вообще не является конструктором. Я довольно большой JS noob об этом, но есть ли способ для меня вручную создать один из этих объектов? Каким будет метод для этого?
Ответы
Ответ 1
Любая функция, написанная в JavaScript, может быть конструктором при вызове с использованием ключевого слова new
. Как вы уже заметили, функция, с которой вы имеете дело, является родной, то есть написана на C или С++ (возможно, С++, поскольку движок JavaScript Chrome написан на С++ тоже). Родные функции/объекты могут иметь определенное поведение, такое как ваш случай, когда вы не можете использовать его в качестве конструктора - там вы ничего не можете сделать.
В этой "функции" нет даже метода .call()
, вы также не можете вызывать его на ранее созданном вами объекте (не так, чтобы это было очень полезно, поскольку у него не было бы правильного [[Prototype] ] set)