#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"