繁体   English   中英

向对象原型添加名称空间方法

[英]Adding a namespace method to the object prototype

我正在尝试在javascript中向对象原型添加名称空间方法。

我想做的是这样的:

var myObj = {}
myObj.namespace('nested.objects.are.created.if.not.present')

但是我迷路了。 做一个泛型函数似乎很容易,但是不将其添加到原型中。

这是我所拥有的:

Object.prototype.namespace = function(ns_string) {
    var parts = ns_string.split('.');
    var parent = this;
    var i;
    var length = parts.length
    for (i = 0; i < length; i++) {
        // Create a property if it doesnt exist
        if (typeof parent[parts[i]] === "undefined") {
            parent[parts[i]] = {};
        }
        parent = parent[parts[i]];
    }
}

似乎每次未正确设置parent的值。 我确定这是我最想念的东西,但我不确定它是什么。

提前致谢。

理查德

首先,正如Onkelborg所说,这不是一个好主意(我什至会说这是一个非常糟糕的主意)。 向核心对象的原型添加属性只会带来麻烦。 假设您添加了此方法,并且您网站上的某些代码(可能是您的代码,可能来自库)会执行以下操作:

for (var key in {foo: 'bar'}) {
    // How many times will this iterate?
}

该循环只循环一次,并将“ foo”作为键。 但是实际上,它将循环两次,因为您的“命名空间”属性将显示为一个属性。

话虽如此,如果您仍然想这样做,那么您的基本代码应该可以正常工作。 唯一会弄乱parent值的是,如果关闭了它,要实现this目的,您将必须使用foo.namespace.call(bar)或类似的方法使用不同的“ this”来调用该方法。

如果您不使用call (或call的兄弟姐妹,请apply ),则一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM