字符串原型自定义方法,以利用encodeURIComponent()

时间:2014-06-25 06:48:09

标签: javascript prototype encodeuricomponent

我正在为Javascript字符串编写此方法encodedURIComponentValue()

我的想法是允许我致电:"some string".encodedURIComponentValue()

代码如下:

if (typeof String.prototype.encodedURIComponentValue != 'function') {
    String.prototype.encodedURIComponentValue = function (str) {
        if (str && str.length > 0)
            return encodeURIComponent(str);
        else
            return "";
    };
}

但在某些情况下它不起作用:

var encodedVal = $("body").find("option:selected").first().text().encodedURIComponentValue() // text() = "Option1" 

console.log(encodedVal); // I only see "" (empty)

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可能会发现following answer有用,因为它解释了原型,构造函数和this的值。

在这种情况下,我不会像你那样建议这样做。你不拥有String并修改它会破坏封装。唯一有效的"如果你需要实现一个现有的方法来支持旧的浏览器(如Object.create),情况就是这样。关于here的更多信息。

你可以做你正在做的事情:

encodeURIComponent(
  $("body").find("option:selected").first().text()
);

所以除了喜欢其他语法之外,其他任何理由都没有。

答案 1 :(得分:0)

好吧,这是我的愚蠢错误 - str是从未提供过的参数。 所以我改为这个并且它有效:

if (typeof String.prototype.encodedURIComponentValue != 'function') {
    String.prototype.encodedURIComponentValue = function () {
        if (this && this.length > 0)
            return encodeURIComponent(this);
        else
            return "";
    };
}

希望我能更多地了解Js中的this关键字