[英]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.