Javascript:没有原型的功能

JavaScript中的内置函数 (例如Object.keys )没有“原型”属性。

Object.keys.prototype === undefined;             // returns true
Array.prototype.slice.prototype === undefined;   // returns true

然而, function(){...}或者new Function()都会生成一个构造函数(Function的实例)以及一个原型(Object的实例)。 这不是太贵吗?

是可以在JavaScript中创建一个纯函数而不是构造 函数


除了Math.random ,JS中的内置函数是纯粹的设计。 你不应该用new陈述来推导一个函数,它不会为你做正确的工作。

JavaScript是一种多范式编程语言,其暴露二者functionaloop感官。 所以,你有没有原型的纯粹功能:

Math.round // whose typeof is function
Math.floor // whose typeof is also function

在上面, Math可以被认为是一个名字空间而不是一个Object类型。 所以它只是一个为您提供一组功能的容器。

相反,如果您在JavaScript中引用原型对象的函数,除非您通过原型引用它们,否则您将得到一个未定义的对象

Array.map // undefined
Array.reduce // undefined

这是因为事实上, Array不是像Math那样的名称空间,它是OOP意义上的一类对象。 所以你需要通过它的实例调用函数,如:

var list = new Array(3);
list.map(function(a){ return 1 });

否则,您可以通过prototype来引用该函数,以访问this对象未绑定的纯函数。 请参阅以下声明:

var list = [1,2,3];
typeof(Array.prototype.map); // It's pure, unbound
Array.prototype.map.call( list, function(a){ return a*2 }); // Usage in a purely-functional way

这背后的含义是,JavaScript被设计为可以用OOP和Functional方式写入。 你可能需要玩弄函数原型,因为我已经给了你一些上面的例子,这将进一步阐明你:)


问题是“创造”它们是什么意思“?

对于所有意图和目的,

function myFunc ( ) { }

myFunc.constructor = undefined;
myFunc.prototype = undefined;

从实际的角度来看,你会得到你想要的。

在ES6中,lambda应该与其他功能无关;

(() => { }).prototype === undefined; // I believe this should be 100% true

...你的另一个问题......是否为每个功能创建了添加的功能/对象,这太昂贵了......

....好吧,有些游戏在浏览器上运行愉快。 从功能的角度来讲,内存消耗通常是非常小的,这些日子(尽管IoT /可穿戴设备会成为一个问题)。
这是一个过早的微观优化。


当你没有new称呼时,这是一个纯粹的功能

链接地址: http://www.djcxy.com/p/26711.html

上一篇: Javascript : functions without prototype

下一篇: Coq can't find subterm when using rewrite tactic