我正在为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)
有什么想法吗?
答案 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
关键字