向对象原型添加命名空间方法
Adding a namespace method to the object prototype
我正在尝试用javascript向Object原型添加一个名称空间方法。
我想做的是:
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]];
}
}
似乎每次都没有正确设置父项的值。我确信我错过了一些非常基本的东西,但我不确定它是什么
提前谢谢。
Richard
好吧,首先,正如Onkelborg所说,这不是一个好主意(我甚至会说这是一个非常糟糕的主意)。将属性添加到核心对象的原型中只会带来麻烦。假设你添加了这个方法,你的网站上的一些代码(可能是你的,可能来自库)会:
for (var key in {foo: 'bar'}) {
// How many times will this iterate?
}
该循环应该只迭代一次,将"foo"作为键。然而,在实践中,它会循环两次,因为您的"namespace"属性将显示为一个属性。
话虽如此,如果你真的想这样做,你的基本代码应该可以工作。唯一可能使parent
的值混乱的是,如果this
处于关闭状态,则必须使用不同的"this"调用方法,使用foo.namespace.call(bar)
或类似的方法。
如果您不使用call
(或者它的兄弟apply
),那么一切都应该正常。
相关文章:
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 处理此命名空间 JavaScript 结构的最佳方法是什么?
- jQuery命名空间声明和模块化方法
- 将参数传递给回调函数而不更改方法(Siesta Testing命名空间)
- 向对象原型添加命名空间方法
- Javascript命名空间 - 是这种特殊方法的良好实践
- 为命名空间上公开的方法创建类型定义
- Coffeescript 类命名空间方法
- 要打包的命名空间流星方法
- 使用 Javascript 命名空间/singleton 将不接受传递给成员方法的参数
- jQuery - 方法链的插件和命名空间问题
- OOP,命名空间的顶级方法内部的私有函数
- 什么'这是向全局命名空间公开requireJS模块的正确方法
- javascript jsdoc命名空间类静态方法
- 如何链接具有命名空间的方法
- 什么's命名空间以及如何从命名空间导出方法
- 如何在维护命名空间的同时创建类似jQuery的方法链接
- 在单独的窗口命名空间中加载和访问Js的方法
- 这些命名空间方法之间的区别是什么?
- 是否有一种方法可以仅解除非命名空间事件的绑定