0

我已经制作了我的自定义对象,我想添加一个方法。我想将我的值大写。但它给了我[object object]。知道如何完成它。小提琴

function checkObj (name,title,salary){
    this.name= name;
    this.title= title;
    this.salary= salary;
    }

var woo=new checkObj("rajora","this is a test",2000);
checkObj.prototype.inc=function (){
    for(i=0;i<this.length;i++){
    this[i]= this[i].toUpperCase();
    }
    };
woo.inc();
console.log(woo)
4

3 回答 3

1

当您调用console.log()并传递一个类似 的对象woo时,它用于woo.toString()获取它的字符串表示并打印它。

woo继承默认情况下打印你得到的字符串,toString()即.Object.prototype[object object]

你必须toString()像这样覆盖:

checkObj.prototype.toString = function() {
    var result = "checkObj {";
    for (var prop in this) {
        if (this.hasOwnProperty(prop))
            result += (prop + " : " + String(this[prop]).toUpperCase() + ", ");
    }
    result += ("}");
    return result;
}

现在你可以了console.log(woo),它会按预期工作。

于 2013-10-12T11:43:46.797 回答
1

你只需要inc像这样改变你的功能

checkObj.prototype.inc = function() {
    for (var key in this) {
        if (this.hasOwnProperty(key)) {
            if (typeof this[key] === 'string') {
                this[key] = this[key].toUpperCase();
            }
        }
    }
};

这给了我以下输出

{ name: 'RAJORA', title: 'THIS IS A TEST', salary: 2000 }
于 2013-10-12T11:57:12.583 回答
1

演示在这里

像这样的js代码:

function checkObj (name,title,salary){
this.name= name;
this.title= title;
this.salary= salary;
}

checkObj.prototype.inc=function(){

var self=this;

for(var i in self){
    if(self.hasOwnProperty(i)){
        output(i);
    }
}

function output(item){
    if(typeof self[item]==='string'){
        self[item]=self[item].toUpperCase();
        console.log(self[item]);
    }
}
};

对你有帮助吗?

于 2013-10-12T12:52:46.227 回答