javascript - 来自 : "Javascript - The Good Parts" 的示例

标签 javascript function prototype

以下解决了什么“丑陋”?有一些我没有得到的东西,我很感激帮助理解它是什么。


例如,通过扩充 Function.prototype,我们可以使一个方法对所有函数可用:

Function.prototype.method = function (name, func) {
     this.prototype[name] = func;
     return this; 
};

通过使用 method 方法扩充 Function.prototype,我们不再需要键入原型(prototype)属性的名称。现在可以隐藏那一点丑陋了。

最佳答案

好吧,丑陋是主观的,但让我们看看。

你通常写:

function Foo () {}
Foo.prototype.method1 = function ()  { /*...*/ };
Foo.prototype.method2 = function ()  { /*...*/ };

您将 prototype 对象扩展为 constructor function具有您希望继承到新运算符创建的实例的属性。

例如,var obj = new Foo(); 您正在创建 Foo 构造函数的实例,该对象将继承绑定(bind)到 的所有属性code>Foo.prototype 对象和 prototype chain 中更高层的其他对象.

Crockford 的方法也是如此,该方法定义在 Function.prototype 对象中,所有函数都继承自该对象,因此您可以这样调用该方法:

function Foo () {}
Foo.method('method1', function () { /*...*/ });
Foo.method('method2', function () { /*...*/ });

它基本上只是隐藏代码中的prototype 词,Crockford 认为它丑陋...

“JavaScript The Good Parts”是一本非常好的书,但我认为它是基于 Douglas Crockford 对这门语言的个人观点。

我同意他的很多观点,但我也有一些不同意的地方......

关于javascript - 来自 : "Javascript - The Good Parts" 的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2947723/

相关文章:

javascript - HTML canvas 中的大数字翻译会导致奇怪的行为

c++ - 在 C++ 中将函数作为参数传递给模板?

r - 有没有办法简化 R 中利用循环的函数?

javascript - 这种 JavaScript 编码风格有什么问题? (闭包与原型(prototype))

javascript - 为什么 foo.hasOwnProperty ('__proto__' ) 等于 false?

javascript - NodeJS/Javascript 函数返回未定义

javascript - 如何重构大型网站的前端?

c# - 在 C# 中传递和存储指向不可变类型和字符串的指针

javascript - 通过原型(prototype)扩展数学对象不起作用

javascript - 当用户停止滚动时捕获事件