Определите свойство в прототипе объекта и получите тип объекта

#javascript

#javascript

Вопрос:

Я создал свойство в Object прототипе, который является объектом с некоторыми функциями:

 Object.defineProperty(Object.prototype, "json", 
{
    value: function()
    {
        return {
            _value: this,
            parse: function()
            {
            }
        };
    },
    enumerable: false
});
  

Я хочу иметь возможность вызывать это для любого объекта, например:

 "simple string".json().parse()
// or
var a = {b:1};
a.json().parse()
  

Внутри parse() функции у меня есть this._value сам объект. В случае строки значение будет:

 String {0: "s", 1: "i", 2: "m", 3: "p", 4: "l", 5: "e", 6: " ", 7: "s", 8: "t", 9: "r", 10: "i", 11: "n", 12: "g", length: 13}
  

Если я использую, typeof(this._value) вернется "object" . В случае объекта:

 Object {b: 1}
  

Мой вопрос в том, как я могу определить, был ли объект изначально строкой, поскольку это объект, и typeof (правильно) возвращает меня "object" ?

Демонстрация приведенных выше кодов.

PS: Извините за ужасное название. Если у кого-то есть идеи, как сделать это лучше, было бы неплохо объяснить самостоятельно.

Комментарии:

1. Вы ищете instanceof ?

2. @VisioN да. Это сработало! Вы хотите ответить?

3. @VisioN приятно! Спасибо.

Ответ №1:

То, что вы ищете, это instanceof operator:

 ("simple string".json()._value) instanceof String  ===  true
  

Ответ №2:

Чтобы не получить this значение, приведенное к объекту, вы можете использовать строгий режим:

 Object.defineProperty(Object.prototype, "json", {
    value: function() {
        "use strict";
        return {
            _value: this,
            parse: function() {
            }
        };
    }
});
typeof "simple string".json()._value // "string"
typeof new String("simple string").json()._value // "object"