尝试掌握 Javascript 中的原型(prototype)设计。尝试创建我自己的命名空间以扩展 JavaScript 中的 String 对象。
这是我目前所拥有的(片段):
var ns {
alert: function() {
alert (this);
}
}
String.prototype.$ns = ns;
如您所见,我正在尝试将一系列函数放入 ns 命名空间中。所以我可以执行这样的命令:
"hello world".$ns.alert();
但问题是,this 没有引用发送的文本(在本例中为“hello world”)。我得到的是一个警告框,其中包含以下内容:
[对象对象]
由于没有完全掌握 JavaScript 面向对象的本质,我不知所措,但我猜我遗漏了一些简单的东西。
有谁知道如何实现这一点(从嵌套对象中获取源文本)?除此之外,我还不得不进行程序编程 ( ns.alert("hello world"); ),而我正试图避免这种情况。
谢谢-
最佳答案
发生这种情况是因为当您调用一个引用时,它的基础对象被设置为被调用方法的this
值(更多技术细节here)。
因此,当您调用 "hello world".$ns.alert();
时,您的 alert
方法中的 this
值将引用到 "hello world".$ns
,即 String.prototype.$ns
。
我不认为在内置对象的 prototype
中添加对象级别(命名空间)会有用,我通常建议 not modify objects you don't own .
关于JavaScript 原型(prototype)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2798076/