Использование цикла for-in внутри объекта для доступа к его элементу
function Cons()
{
this.a = "variable a";
this.callme = function callme()
{
var str = "";
for(var x in this)
{
str += this[x] + " ";
}
return str;
}
}
var obj = new Cons();
obj.c = "variable 2";
var fin = obj.callme();
document.write(fin);
Я хочу, чтобы внутри объекта была функция, чтобы при ее вызове она могла возвращать строку, состоящую из значений каждого члена. Вот в этом случае a
а также c
, Теперь, что происходит, все внутри функции, я имею в виду, код печатается внутри браузера, а не просто возвращает значение str
,
Я понял, что эта ["callme"] часть цикла for-in возвращает весь код в качестве его переменной. Так как решить эту проблему.
Я новичок в JavaScript, пожалуйста, помогите мне.
2 ответа
Если вы хотите избежать печати тела функции, проверьте, является ли свойство функцией, и напечатайте только ее имя:
this.callme = function callme()
{
var str = "";
for(var x in this)
{
if ('function' === typeof this[x]) {
str += x + " ";
} else {
str += this[x] + " ";
}
}
return str;
}
Есть несколько способов решить эту проблему:
1) Удалить callme из for..in:
for(var x in this) {
if (x !== 'callme') {
str += this[x] + " ";
}
}
2) Объявите callme как не перечисляемое свойство:
function Cons() {
Object.defineProperty('callme', {
enumerable : false,
value : function callme() {
var str = "";
for(var x in this)
{
str += this[x] + " ";
}
return str;
}
});
}
3) Измените метод toString в callme, чтобы он ничего не возвращал:
function Cons() {
this.a = "variable a";
this.callme = function callme() {
var str = "";
for(var x in this)
{
str += this[x] + " ";
}
return str;
}
this.callme.toString = function(){ return '';};
}
Самое простое решение - первое, но другие слишком интересны, чтобы их пропустить.