只是好奇如何继承String对象。 (prototypically)

时间:2012-10-03 20:27:51

标签: javascript subclass

我知道这是不受欢迎的,我只是在探索这个想法,因为我的生活似乎无法按照我想要的方式来完成这项工作。

这个例子应该解释所有:

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

var theString = 'Kung';

alert(theString.MyNS.fooify());

当然,这只是简单地将函数定义附加到' foo' ...添加此()而不起作用。

据我所知,我在那里失去了背景,但无法弄清楚如何使原件发射并给我我想要的东西。

2 个答案:

答案 0 :(得分:7)

这是你可以做到的一种方式:

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

in action on jsFiddle

注意,正如slashingweapon指出的那样,你必须像这样调用它:

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

据我所知,没有跨浏览器方式可以做到这一点而无需将MyNS作为函数调用。

答案 1 :(得分:1)

您正在向function class添加新的String(oo条款prototype),并且无法访问实际的String实例。

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

String.prototype.fooify = function() {
   return this + 'foo!';
}
var theString = 'Kung';
alert(theString.fooify());