【问题标题】:Is there a function like prototype.toArray in vanilla JavaScript?vanilla JavaScript 中是否有类似prototype.toArray 的函数?
【发布时间】:2014-03-08 00:38:14
【问题描述】:

我想更改从 JavaScript 对象返回的值,代码如下:

F.prototype.valueOf = function(){return "foo";}
F.prototype.toString = Id.valueOf();

“F”是 JavaScript 类,“foo”是我返回的字符串。 这在调用这样的警报时效果很好:

alert(F());    //alerts foo

但是有什么方法可以让一个对象的值变成一个数组呢?也许像

F.prototype.valueOf = function(){return ["foo", "bar"];}
F.prototype.toArray = Id.valueOf();

?

【问题讨论】:

    标签: javascript arrays string class object


    【解决方案1】:

    valueOf 只能转换并返回原始值,因此您不能强制它返回Array。您可以尝试使用 JSON.Stringify 返回一个 JSON 字符串,稍后可以在 1 上对其进行解析。另见this article,或MDN documentation

    您当然也可以编写一个自定义的“getter”函数来检索您的自定义 valueOf,例如:

    F.prototype.getValue = function() {return ['foo', 'bar']};
    

    1 例如

    var someobj = {
                   bar: 1, some: [1,2,3], 
                   x: 'string', foo:[{a:1,b:2},2,3], 
                   valueOf: function(){return JSON.stringify(this);}
                  };
    someobj.valueOf(); 
    //=> "{"bar":1,"some":[1,2,3],"x":"string","foo":[{"a":1,"b":2},2,3]}"
    

    【讨论】:

    • 谢谢!不过太糟糕了,我要返回的数组包含混合数据类型,而不仅仅是字符串。所以我猜我不能使用 JSON...
    • 或许在这种情况下你不应该覆盖valueOf
    • @Ood:看例子,混合值应该不是问题。 @Tibos:是的,如果需要来自valueOf 的特殊值,也可以为此编写一些get 方法。
    • 谢谢,这可能对我想要完成的工作有用!
    猜你喜欢
    • 2011-10-26
    • 2013-12-11
    • 2012-07-22
    • 2011-03-27
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 2013-05-03
    • 2011-08-01
    相关资源
    最近更新 更多