作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我遇到了this article Baranovskiy 先生基本上说人们不应该使用 new
运算符来使用您的 api。我创建了 this basic example它允许您使用这行代码创建 colorBox
的实例 var box = new colorBox(node, options);
如何在不使用 new
运算符的情况下实现示例中的内容?
JS:
var colorBox = function(node, options) {
this.setSize = function(){
node.style.width = options.width + 'px';
node.style.height = options.height + 'px';
}
this.setColor = function(color){
node.style.backgroundColor = color || options.color;
}
this.setSize();
this.setColor();
}
var node = document.getElementById('thing1');
var options = {
color: 'red',
width: 200,
height: 200
}
var box = new colorBox(node, options);
setTimeout(function(){
box.setColor('blue');
}, 2000);
最佳答案
首先,我不同意这篇文章 - 我认为 new
是编写代码的一种非常合理的方式,并且清楚地表明您正在创建“类”的实例,就像任何面向对象的语言一样。
但是……
看看 this answer 上的第二种方法, 它显示了如果调用者离开 new
(如果 this
不是“类”的实例,则调用者离开 new
,this
可能是全局窗口)。这是一种不需要用户键入 new
的方法,同时仍然每次都安全地返回一个新实例。
var colorBox = function(node, options) {
if (!(this instanceof colorBox))
return new colorBox(node, options);
// do the rest of your constructor stuff
};
关于javascript - 如何在 JS API 中不使用 `new` 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17867127/
我是一名优秀的程序员,十分优秀!