6

字符串可以被看作是可以保存和操作文本的最简单的对象,因此作用于字符串的函数不一定被归为方法。另一方面,javascript 主要是一种 Web 编程语言,使用 URI 是该语言中字符串的常见用途。在这种情况下,类似的东西lastName.encodeURIComponent()实际上会非常有用。

为什么像 encodeURIComponent 和 unescape 这样的东西是函数而不是 String 对象上的方法?这里有一些 CS 原则在起作用,还是语言设计者之一的主观选择?

显然不是每个对字符串进行操作的函数都需要在字符串对象中,但是人们在哪里以及如何决定在哪里画线呢?

4

4 回答 4

7

因为它们特定于浏览器环境。它们在 JavaScript 语言的通用 String 对象中没有位置。

于 2012-05-15T13:40:27.030 回答
3

我不认为这些方法是 JavaScript 的一部分,而是继承自window,这是与浏览器关联的全局对象。因此,虽然您列出的函数处理字符串,但它们实际上与浏览器函数紧密绑定,因此不附加到String原型。像 MDN 这样的来源在这方面有点模糊,但我很确定原始的 JS 规范没有提到这些方法。

这可能没有多大意义,但现在可以想象,有人可能想将 JS 用作嵌入式系统的语言或其他与 Internet 无关的语言。在这里,包含的语法encodeURIComponent()document.getElementById().

于 2012-05-15T13:42:06.173 回答
1

你会在哪里停下来。字符串是无所不在的,根据定义,您使用的任何将字符串作为参数或返回的方法都应该在字符串类中。

同样,拥有采用流的编码方法和进行编码的流方法也是合理的。

你会很快到处都是,或者你会通过委托给一个 Encoding 类来扩展字符串。

于 2012-05-15T13:43:06.610 回答
1

escape() 函数对字符串进行编码。

这个函数 m*获取一个字符串可移植*,因此它可以通过任何网络传输到任何支持 ASCII 字符的计算机。

此函数对特殊字符进行编码

现在这个功能是特定于字符串的,它是基于浏览器的环境中的 URL,JS 作为一种语言是独立于它的。

所以将 escape,unescape 也放入 String 将在非网络/URL相关的场景中变得无用。

这就是为什么它们是Window 对象的一部分

你想要它在字符串中,你可以将它添加到字符串的原型中。

于 2012-05-15T13:46:40.400 回答