1

我增加 Object 的动机是我希望能够轻松处理旨在简单存储数据的对象(如 Java 中的“hashmap”)。我想轻松地做 hashmap.size()。

假设我的对象有一个名为 objData 的属性,当这样制作时它是空的:

var objData = {};

我的对象有一些方法可以像这样向 objData 添加数据:

this.objData[key1name] = data1;

我的对象也有一些访问 objData 的方法:

if(this.objData.size() == 0):

当然,不存在这样的方法。这就是我增加 Object 对象的动机:

        Object.prototype.getOwnPropertyCount = function ( ) {
            var count = 0;
            for(var item in this) {
                if (this.hasOwnProperty(item)) {
                    count += 1;
                }
            }
            return count;
        };

现在我应该能够做到:

if (this.objData.getOwnPropertyCount() == 0)

或者:

if(!objData.getOwnPropertyCount())

但实际上,当我尝试加载与我编写的任何代码完全无关的页面时,我会遇到错误。我在谷歌地图 api 的 main.js 中遇到错误。巫毒教。

所以我改变我的扩充来扩充实际的 Object 而不是 Object.prototype:

Object.getOwnPropertyCount = function ( ) {
    //calculate the count
    return count;
};

现在我在 Firefox 中收到以下错误:

this.objData.getOwnPropertyCount is not a function

我在这里想念什么?

4

1 回答 1

1

当您将方法声明从Object.prototype直接移动到Object构造函数时,该方法在所有对象的原型链中不再可用(顺便说一句,这是一件好事),我建议您为函数提供一个参数,以传递您需要的对象操作,并更改您的方法调用:

// from `this.objData.getOwnPropertyCount()` to:
Object.getOwnPropertyCount(this.objData);

显然,在您的实现中,您应该计算传递对象的属性,因为,在上面的示例this中将引用构造函数。Object

于 2011-07-31T21:10:59.067 回答