Я могу установить тип объекта JavaScript?

Я пытаюсь использовать некоторые более усовершенствованные функции OO JavaScript, после "супер конструктора Doug Crawford" шаблон. Однако я не знаю, как установить и получить типы от моих объектов с помощью собственной системы типов JavaScript. Вот то, как у меня есть он теперь:

function createBicycle(tires) {
    var that = {};
    that.tires = tires;
    that.toString = function () {
        return 'Bicycle with ' + tires + ' tires.';
    }
}

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

Есть ли способ переопределить typeof или instanceof операторы для моего пользовательского объекта?

14
задан Evan Kroske 17 December 2009 в 03:37
поделиться

4 ответа

Вы можете использовать инструмент SWIG для включения библиотек C через интерфейс на собственном языке. Вам придется выполнять вызовы C api из Python, но остальная часть вашего кода может быть только Python.

Может показаться немного устрашающим, но как только вы настроите все, использование этих двух вместе не будет Плохо. В зависимости от того, как была написана библиотека C, могут быть некоторые причуды, но с ними придется иметь дело независимо от того, какой вариант вы использовали.

15
ответ дан 1 December 2019 в 12:52
поделиться

Если вы объявите Bicycle вот так, instanceof будет работать:

function Bicycle(tires) {
  this.tires = tires;
  this.toString = function () {
    return 'Bicycle with ' + tires + ' tires.';
  }
}

var b = new Bicycle(2);
console.log(b instanceof Bicycle);
3
ответ дан 1 December 2019 в 12:52
поделиться

Только в Firefox вы можете использовать свойство __ proto __ для замены прототипа объекта. В противном случае вы не сможете изменить тип уже созданного объекта, вы должны создать новый объект, используя ключевое слово new .

1
ответ дан 1 December 2019 в 12:52
поделиться

На мой взгляд, в правильно спроектированном тип иерархии, вам не нужно знать типы отдельных объектов. Но я, кажется, в меньшинстве

Если у вас должна быть идентификация типа, сделайте это явным.

MyClass.prototype.type = "MyClass";

Это надежно и переносимо, по крайней мере для ваших объектов. Он также работает через контексты. Объекты DOM - еще один имеет значение, хотя вы можете делать вещи проще для себя с

window.type = "window";

и т. д.

Я полагаю, что приведенная выше цитата была написана Дугласом Крокфордом .

0
ответ дан 1 December 2019 в 12:52
поделиться
Другие вопросы по тегам:

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