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是一种多范式编程语言,其暴露二者functional
和oop
感官。 所以,你有没有原型的纯粹功能:
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
称呼时,这是一个纯粹的功能