为啥不是原生内置的类似框架的功能?
Posted
技术标签:
【中文标题】为啥不是原生内置的类似框架的功能?【英文标题】:Why aren't framework-like functions built in natively?为什么不是原生内置的类似框架的功能? 【发布时间】:2011-07-05 08:09:37 【问题描述】:我只是想知道为什么像 String.contains()
这样的微不足道的函数不是 javascript 核心本身的一部分。我的意思是,虽然 JavaScript 核心包含了在核心函数的基础上创建新函数所需的所有函数,但一些明显的函数在默认情况下不可用。
有一些很棒的框架基本上扩展了 JavaScript 核心,但我只是不明白为什么它们不是原生内置的。
此外,例如,jQuery ajax()
函数比原生 XMLHttpRequest
对象对开发人员更友好。为这样的事情使用框架几乎是必不可少的。
那么为什么这些函数在 JavaScript 核心本身中不可用?
【问题讨论】:
【参考方案1】:有一些很棒的框架 那里基本上扩展了 JavaScript 核心,但我就是不明白 为什么它们不是原生内置的。
我认为没有人有先见之明,提前 10 到 15 年思考技术的实现将如何发挥作用,哪些浏览器将支持当时标准化的部分规范创建这些我们在 2011 年发现有用的实用函数。
Javascript 由 Eich 于 1995 年创建,当时的情况大不相同。那时还没有“Ajax”,那么人们怎么会认为 15 到 16 年后我们需要一些跨浏览器的 ajax 功能呢?微软在 1996 年推出了 iframe,在 1999 年推出了 XMLHttp (Ajax)。
如果你是 1995 年的 Brendan Eich,想想浏览器的功能以及互联网不像现在这样流行、缺乏标准化的事实 - 你会想到这些事情吗?其中很多,比如“Ajax”,甚至都不存在?
就语言变化而言,我要说的原因主要是因为 IE 版本之间存在大量时间,特别是 IE6 到 IE7 相隔 5-6 年,而 IE7 仍然有 ECMA-262 , CSS1/CSS2 错误,所以如果更新的 Javascript 功能采用几年前发布的规范如此缓慢,它怎么可能支持这些功能。
这在另一个答案中提到过,但 Javascript 只是原始 Javascript ECMAScript 的超集。构建 Actionscript 和 Javascript 以及其他语言的核心 ECMAScript 不包含 DOM 或 XMLHttpRequest 之类的方法。浏览器将脚本语言与渲染引擎/DOM绑定,并为环境提供浏览器方法。
【讨论】:
我同意你的观点 - 但随着时间的推移,语言可能会稍微改变成我今天想的样子。 @pimvdb 可以,但这可能会破坏现有网站的负载,这意味着旧浏览器将在很长一段时间内不支持新功能并且所以它们无论如何都不能可靠地使用。【参考方案2】:与所有为什么 X 语言没有 Y 功能? 问题的答案是:
因为原始语言作者没有包含它。
为什么?我想只有他们知道。
【讨论】:
我明白你的意思,但是 JavaScript 是一种非常常用的语言,这意味着我认为它的核心会随着时间而改变。 @pimvdb:一种非常常用的语言,具有多种运行时实现(不同的浏览器)。添加功能越多越好,但在这种情况下要困难得多。 你说得对,框架实际上是 JavaScript 最简单的解决方案。我只是想知道为什么它本身不可用,但我现在明白为什么了,谢谢。【参考方案3】:我认为重要的是要注意 JavaScript,又名 ECMAScript,不一定是一种浏览器语言。它的目的是成为一种可在任何程序中使用的可嵌入语言。 XMLHttpRequest
之类的东西不是语言的一部分,它们只是由浏览器提供,作为使语言实际 [i]do[/i] 某事的一种方式,因为纯 JavaScript 没有内置操作来交互什么都有。
至于字符串,我不确定为什么语言中忽略了这么多字符串操作。例如,为什么没有 Trim 功能?谁知道呢。
【讨论】:
我不知道——据我所知,JavaScript 几乎只在网络上使用。无论如何,有一个trim()
函数原生地内置在(至少是 Chrome 的)JavaScript 中。
@pimvdb 哦,真的吗?那挺好的。 Chrome 要么添加它,要么它是新 ECMAScript 的一部分。自从我调查 String 中缺少的内容以来已经有一段时间了。以上是关于为啥不是原生内置的类似框架的功能?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 std::initializer_list 不是内置语言?