Javascript 为什么或者为什么不是某些数据类型的核心函数的缩写?
在Ruby中,您可以编写类似于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),是否有任何语言实现了与核心数据类型(字符串、列表/数组等)相关的函数的速记?这是赞成还是反对 我意识到
“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的值的函数