JavaScript构造函数参数
JavaScript constructor arguments
有人能向我解释一下JavaScript构造函数到底是如何工作的吗?具体来说,我谈论的是以下场景:
在我的Web端代码中,我有两个元素,需要使用MutationObserver来观察。我试着只对一个观察者这样做,但没有成功。所以我提出了以下解决方案:
var observer = new MutationObserver(function (mutations) { /*Code to do stuff */ });
var observer2 = new MutationObserver(function (mutations) { /*Code to do stuff */ });
然后我给了他们一些观察的东西:
observer.observe(document.getElementById("textarea1"), {attributs: true, attributeFilter: ['style'] });
observer2.observe(document.getElementById("textarea2"), {attributs: true, attributeFilter: ['style'] });
有了这些观察者,我想改变风格,否则我会得到一个无休止的循环,我告诉观察者.disconnect(),改变风格,然后让它重新开始观察。
因为"textarea1"answers"textarea2"基本上是相同的(但内容不同),所以我不想两次使用相同的代码,唯一的区别是要调用的特定观察者对象。
所以我尝试了以下方法:
var observer = new MutationObserver(function (mutations) {
mutate(mutations, observer);
});
var observer2 = new MutationObserver(function (mutations) {
mutate(mutations, observer2);
});
function mutate(mutations, observer) {
/*do stuff with mutations and observer*/
}
而且效果很好。
还有一件事我真的不明白:如果构造函数的结果是我想使用的参数,我怎么能把一些东西作为参数传递给构造函数。。。?
您可以在实际使用变量之前通过声明变量来实现。
示例:
var observer, observer2, mutate;
observer = new MutationObserver(function (mutations) {
mutate(mutations, observer);
});
observer2 = new MutationObserver(function (mutations) {
mutate(mutations, observer2);
});
mutate = function (mutations, observer) {
/*do stuff with mutations and observer*/
}
Javascript的新版本实际上是为你做这件事的,这个概念叫做提升。这就是为什么这是有效的。
所有var
声明都被挂起,这意味着您的代码等效于:
var observer;
observer = new ...
变量名称observer
从一开始就存在于作用域中。
从那里你所拥有的就是:
var observer;
function () {
foo(observer);
}
这完全是法律法规。您正在定义一个函数,当调用该函数时,该函数将使用父作用域中的变量observer
执行某些操作。变量只在调用时求值,因此它的值在那个时候是很重要。由于它在之后的某个时候被称为,您已经为observer
分配了一些东西,所以这很好。
类似的示例:
var foo;
setTimeout(function () { alert(foo); });
foo = 'bar';
这会提醒bar
,因为执行回调时,foo
保持值'bar'
。
相关文章:
- 使用闭包共享构造函数参数
- 当一个重要的构造函数参数丢失时应该发生什么
- 使构造函数参数具有ES6类方法的特权
- Windows.Networking.EndpointPair构造函数参数
- ES6类构造函数参数
- 具有默认参数值的 ES6 类构造函数上的 NodeJS 错误
- 访问谷歌登录函数 Angular 2 中的构造函数参数
- 如何在node.js中查找进入构造函数的参数数量
- JavaScript-构造函数参数和原型继承
- JavaScript构造函数参数
- javascript中带有参数的构造函数
- 避免将jquery选择器作为构造函数参数发送时内存泄漏
- 在nodejs中,如何使模块的单个实例具有不同参数的构造函数
- 是否需要初始化在 Javascript 中作为“类”构造函数参数传递的变量
- 消费者如何在 Angular 2 中提供组件构造函数参数
- 通过将参数传递给我们的构造函数来创建唯一的对象
- Angular2 将函数参数传递给构造函数
- 在 JavaScript 中以编程方式设置构造函数参数
- 获取“未定义无参数构造函数”;错误,不知道为什么
- Dojo无参数构造函数调用带有参数的基构造函数