Javascript 为什么或者为什么不是某些数据类型的核心函数的缩写?

Javascript 为什么或者为什么不是某些数据类型的核心函数的缩写?,javascript,ruby,function,elm,Javascript,Ruby,Function,Elm,在Ruby中,您可以编写类似于“hello”.upcase,而在许多其他语言(如Javascript和Elm)中,这需要类似于字符串.upcase(“hello”)的样式。这感觉是多余的 当库的名称表示函数的某个参数的数据类型时(例如String.upcase(String\u-type\u-argument)),或者[特殊字符]upcase(String\u-type\u-argument),是否有任何语言实现了与核心数据类型(字符串、列表/数组等)相关的函数的速记?这是赞成还是反对 我意识到

在Ruby中,您可以编写类似于
“hello”.upcase
,而在许多其他语言(如Javascript和Elm)中,这需要类似于
字符串.upcase(“hello”)
的样式。这感觉是多余的

当库的名称表示函数的某个参数的数据类型时(例如
String.upcase(String\u-type\u-argument)
),或者
[特殊字符]upcase(String\u-type\u-argument)
,是否有任何语言实现了与核心数据类型(字符串、列表/数组等)相关的函数的速记?这是赞成还是反对


我意识到,在Elm中,一个选项是导入函数(例如,
导入字符串公开(…)
导入字符串公开(某些特定函数)
),但它们会让人困惑(导入整个核心库时函数名可能重叠),或者会因额外工作而烦人(保持特定函数导入与正在使用或未使用的内容保持最新)。

JavaScript与原型一起工作,让我们以字符串为例:

String.prototype
本质上是所有字符串操作方法的容器

一个例子:

String.prototype.toUpperCase = function() {
 // makes the string uppercase and returns it
 // this is a native method
}
您只需在任何字符串上调用此函数,如下所示:

'var name = 'john';

name.toUpperCase() = //JOHN;'
甚至:

'john'.toUpperCase();
现在,假设toUpperCase函数不存在,我们必须复制它的功能

我们可以通过两种方式实现:

将其添加到String.prototype中:

String.prototype.NEWUPPERCASEFUNCTION = function() {
  // we can refer to the 'string' that is always left of the dot with 'this'   
  // which is a reserved word in JS:
  return 'this' in uppercase
}
这通常会引起问题

另一种更常见的方法是,只创建一个函数,其中传入一个字符串并返回该字符串的大写版本,或在“大写”之后返回该字符串:

function upperCaser(string) {
 // not gonna write out the logic here, but you get it
 return updated string
}

JavaScript与原型一起工作,以字符串为例:

String.prototype
本质上是所有字符串操作方法的容器

一个例子:

String.prototype.toUpperCase = function() {
 // makes the string uppercase and returns it
 // this is a native method
}
您只需在任何字符串上调用此函数,如下所示:

'var name = 'john';

name.toUpperCase() = //JOHN;'
甚至:

'john'.toUpperCase();
现在,假设toUpperCase函数不存在,我们必须复制它的功能

我们可以通过两种方式实现:

将其添加到String.prototype中:

String.prototype.NEWUPPERCASEFUNCTION = function() {
  // we can refer to the 'string' that is always left of the dot with 'this'   
  // which is a reserved word in JS:
  return 'this' in uppercase
}
这通常会引起问题

另一种更常见的方法是,只创建一个函数,其中传入一个字符串并返回该字符串的大写版本,或在“大写”之后返回该字符串:

function upperCaser(string) {
 // not gonna write out the logic here, but you get it
 return updated string
}

格式(如
String.doThing(“str”)
“str.doThing()
)之间几乎没有区别。在Java中,这种区别称为“静态”方法和“实例”方法


当然有一些语言有速记编码格式,但唯一的区别在于源代码的简洁。“编译器”仍然生成相同的“编译”代码(或非常类似的代码)。

诸如
字符串.点(“str”)
str之类的格式几乎没有区别.doThing()
。在Java中,这种差异称为“静态”方法与“实例”方法


当然有一些语言有速记编码格式,但唯一的区别在于源代码的简洁性。“编译器”仍然生成相同的“编译”代码(或非常相似的代码)区别在于Ruby和JavaScript是面向对象的语言,而Elm是纯函数式语言

在面向对象语言中,范例是定义一个类(如
String
类),该类将一些局部状态与一些方法打包在一起。这些方法可以读取局部状态并对其进行修改。
“str”
String
类的一个实例,因此它具有可调用的方法有权访问该内部状态的“on-it”,因此可以返回
“STR”

Elm是一种纯函数式语言。它没有对象,只有值和函数,它们接受这些值并返回其他值。函数被分组到“模块”中,但模块没有任何局部状态,因为没有“模块实例”这样的东西

可能令人困惑的是,Elm既有一个
String
类型,也有一个
String
模块,它打包了一系列作用于字符串的函数


因此,
“str”
是一个类型为
String
的值,
toUpper
是一个函数,它接受一个类型为
String
的值,并返回另一个类型为
String
的值。它在
String
模块中定义,因此可以像
String.toUpper(“str”)一样调用它
,但是
字符串
是模块,而不是类型。

区别在于Ruby和JavaScript是面向对象的语言,而Elm是纯函数式语言

在面向对象语言中,范例是定义一个类(如
String
类),该类将一些局部状态与一些方法打包在一起。这些方法可以读取局部状态并对其进行修改。
“str”
String
类的一个实例,因此它具有可调用的方法”可以访问该内部状态,例如,可以返回
“STR”

Elm是一种纯函数式语言。它没有对象,只有值和函数,它们接受这些值并返回其他值。函数被分组到“模块”中,但模块没有任何局部状态,因为没有“模块实例”这样的东西

可能令人困惑的是,Elm既有一个
String
类型,也有一个
String
模块,它打包了一系列作用于字符串的函数

因此,
“str”
是一个类型为
String
的值,
toUpper
是一个接受类型为
Stri的值的函数