5

我知道这是不受欢迎的,我只是在探索这个想法,而我这辈子似乎也无法按照我想要的方式完成这项工作。

该示例应解释所有内容:

String.prototype.MyNS = function() {}
String.prototype.MyNS.fooify = function() {
     return this + 'foo!';
 }

var theString = 'Kung';

alert(theString.MyNS.fooify());

当然,这只是将函数定义附加到 'foo' ...添加 this() 是行不通的。

我知道我在那里失去了上下文,但无法弄清楚如何使原件启动并给我想要的东西。​</p>

4

2 回答 2

7

这是您可以做到的一种方法:

String.prototype.MyNS = function() {
    var _this = this;
    return {
        fooify: function() {
            return _this + 'foo!';
        }
    };
}

在 jsFiddle 上查看它的实际效果

请注意,正如 slashingweapon 指出的那样,您必须这样称呼它:

String.prototype.MyNS().fooify();

据我所知,没有跨浏览器的方法可以做到这一点,而不必MyNS作为函数调用。

于 2012-10-03T20:32:08.023 回答
1

您正在向 the 添加一个新的functionclass以 oo 术语)String prototype,它无法访问实际String实例。

您可以直接将属性添加到原型中:

String.prototype.fooify = function() {
   return this + 'foo!';
}
var theString = 'Kung';
alert(theString.fooify());
于 2012-10-03T20:35:43.183 回答