Почему instanceof возвращает false для синглтона, использующего конструктор с аргументами? - PullRequest
0 голосов
/ 18 сентября 2011

Я пытаюсь проверить наличие определенного типа объекта в моем коде. Несмотря на то, что объект имеет конструктор в своем прототипе, он все еще не может вернуть правильный тип объекта и всегда возвращает «объект» при использовании оператора instanceof.

Вот пример объекта:

Simple = (function(x, y, z) {
    var _w = 0.0;

    return {
        constructor: Simple,

        x: x || 0.0,
        y: y || 0.0,
        z: z || 0.0,

        Test: function () {
            this.x += 1.0;
            this.y += 1.0;
            this.z += 1.0;

            console.log("Private: " + _w);
            console.log("xyz: [" + this.x + ", " + this.y + ", " + this.z + "]");
        }
    }
});

1 Ответ

1 голос
/ 18 сентября 2011

Вы возвращаете литерал объекта со свойством constructor, чтобы установить функцию Simple.Внутренний конструктор по-прежнему имеет значение Object, поэтому instanceof возвращает false.
Чтобы instanceof вернул true, вам нужно установить свойства с помощью this.property в конструкторе или использовать прототипы и инициализировать новый объектиспользуя new Simple().

function Simple(x, y, z) {
    var _w = 0.0;

    this.x = x || 0.0;
    this.y = y || 0.0;
    this.z = z || 0.0;

    this.Test = function () {
            this.x += 1.0;
            this.y += 1.0;
            this.z += 1.0;

            console.log("Private: " + _w);
            console.log("xyz: [" + this.x + ", " + this.y + ", " + this.z + "]");
        }
  });
  (new Simple()) instanceof Simple //true
...