Javascript.闭包和dynamic'这'实际上具有约束力
Javascript. What is the difference between closures and dynamic 'this' binding practically speaking?
我认为,在使用闭包可以实现的目标和使用Javascript中的构造函数可以实现的任务之间有很大的重叠-尽管API中的不同结构有一些细微的差异。
此代码:
function Animal1(name) {
this.name = name;
};
var x = new Animal1('x');
console.log(x.name); // x
在功能上似乎与此代码非常相似:
function Animal2(name) {
var name = name;
var getName = function() {return name;};
return {name: getName};
}
var y = Animal2('y');
console.log(y.name()); // y
除了x被分配了一个__proto__
属性。如果您不打算在代码中使用原型继承,您将如何在闭包和构造函数之间进行选择?
即哪个占用更多内存?哪个更有效?还有其他事情需要考虑吗?等等。
function Animal2(name) {
var name = name;
var getName = function() {return name;};
return {name: getName};
}
var y = Animal2('y');
console.log(y.name()); // y
在前面的代码中,每次调用Animal2时都会生成getName函数。在这种情况下,这当然是微不足道的,但这种方法需要更多的内存,而且速度较慢。这种方法的一个好处是,它允许您进行一定程度的封装,因为您可以在未公开的函数之间共享私有变量。
查看以下内容以了解更多信息:https://developers.google.com/speed/articles/optimizing-javascript
相关文章:
- call()和apply()实际上是用来欺骗方法处理类似数组的对象的
- Javascript.闭包和dynamic'这'实际上具有约束力
- 页面可见性API实际上支持操作系统屏幕锁定吗
- 实际上什么是redux
- 为什么 1.2 == true 返回 false 如果布尔值 (1.2) 实际上是真的
- 函数将信息返回到控制台日志,但实际上并没有执行应有的操作
- 执行上下文和变量对象在 JavaScript 中实际上是一回事吗?
- setScrollbar() 方法实际上在模态.js中做什么
- 找出骨干网“路由器”实际上得到了什么
- React路由帮助路由实际上并没有跳转到页面
- 是带有successcallback的$ajax()调用,实际上是异步的
- 需要帮助使用Phonegap(实际上是Cordova)
- 为什么广播在文档中被描述为标志,而它实际上是一个对象
- 如果数组键实际上是字符串,那么数组和对象的区别是什么
- 如何找到元素'的onClick处理程序实际上是与jQuery一起添加的
- 是我提供的代码实际上与AJAX调用I'I’我想对Servlet做点什么
- javascript中的每个函数调用实际上都是一个新线程吗
- @private注释在 Google Closure JavaScript 代码中实际上做了什么
- JS中的数组实际上是填充了空格,还是打印时填充了零
- Math.floor(Math.random()) +1 实际上做了什么