javascript - 是否可以将对象原型(prototype)上的方法组织到 namespace 中?

标签 javascript prototype

我正在尝试在 JavaScript 中实现特定的语法模式。本质上,要求是用新方法扩展原生 JavaScript 对象的原型(prototype),并将这些方法组织到命名空间中。我正在寻找的结果可以概括为:

String.prototype.foo = {
    bar: function() { return this.toUpperCase(); } //Fails because "this" is foo, not it's parent string
};
'test'.foo.bar(); //should return 'TEST'

我知道还有其他方法可以实现类似的结果,但我真的更希望上面的语法是可能的——尽管我有大约 80% 的把握认为它不是。

我已经尝试了十几种不同的构造方法,但我找不到任何方法在 bar() 中将字符串作为“this”。我认为问题是因为 foo 是一个对象并且没有可执行代码,所以编译器无法将所有者“this”传递给它并从那里向下传递给子方法,但是我想知道是否存在一些我不知道的遍历父链的晦涩技术?下一个最好的方法可能是 'test'.foo().bar(),我还没有尝试过,但听起来更有可能起作用。

最佳答案

当然,给你:

Object.defineProperty(String.prototype,"foo", {
   get: function(){ 
        return { 
            bar: function(){ return this.toUpperCase() }.bind(this)
        }
   },
   enumerable: false, // don't show in for.. in loop
   configuratble: true,
});

"hello".foo.bar(); // "HELLO"

有几点需要注意:

关于javascript - 是否可以将对象原型(prototype)上的方法组织到 namespace 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22108563/

相关文章:

javascript - 原型(prototype)继承 : Calling super constructor in sub "class" constructor function

javascript - 将 DatePicker 添加到模态时出现问题 - 在背景中显示

javascript - IE-8/IE-9 上的 Quickblox

javascript - JS : Convert Array of Strings to Array of Objects

javascript - 理解 typescript 生成的 __extends 函数?

JavaScript 原型(prototype)继承不起作用

JavaScript 原型(prototype)错误

javascript - replaceWith 替换所有文本而不是仅空字符串

javascript - 在类下使用 twitter bootstrap

javascript - 获取像 php 中那样的日期格式?