相关疑难解决方法(0)

JavaScript的"新"关键字被视为有害吗?

在另一个问题中,用户指出该new关键字使用起来很危险,并提出了一种不使用的对象创建解决方案new.我不相信这是真的,主要是因为我使用了Prototype,Scriptaculous和其他优秀的JavaScript库,并且每个人都使用了new关键字.

尽管如此,昨天我在YUI剧院观看道格拉斯·克罗克福德的演讲,他说的完全一样,他new在代码中不再使用关键字(Crockford on JavaScript - Act III:Function the Ultimate - 50:23分钟).

使用new关键字"不好" 吗?使用它有哪些优缺点?

javascript

566
推荐指数
12
解决办法
11万
查看次数

我可以在不使用new关键字的情况下构造JavaScript对象吗?

这是我想做的事情:

function a() {
  // ...
}
function b() {
  //  Some magic, return a new object.
}
var c = b();

c instanceof b // -> true
c instanceof a // -> true
b instanceof a // -> true
Run Code Online (Sandbox Code Playgroud)

可能吗?我可以通过挂钩到它的原型链b来成为一个a容易的实例a但是我必须这样做new b(),这就是我想要避免的.我想要的是什么?

更新:我觉得有可能明智地使用b.__proto__ = a.prototype.我下班后要去做更多的实验.

更新2:下面是你可以得到的最接近的,这对我来说已经足够了.谢谢所有有趣的答案.

function a() {
  // ...
}
function b() {
  if (!(this instanceof arguments.callee)) {
    return new arguments.callee();
  }
}
b.__proto__ = a.prototype …
Run Code Online (Sandbox Code Playgroud)

javascript inheritance constructor prototype

17
推荐指数
3
解决办法
2万
查看次数

如何在javascript中将一个eventListener添加到一个Object中,当对象被操作时会触发它?

我有一个复杂的UI结构,动态操作,并说我有一个ui_state对象,我保持用户的最新UI状态,如哪个选项卡可见,该选项卡内的内容等.

例如:

var ui_states = {
  tabs : [
    {
      name     : "some tab",
      active   : true,
      children : { ... }
    },
    {
      name     : "some other tab",
      children : { ... }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我保持这个html5 localStorage,当用户刷新网站时,它重新打开页面.每次UI更改时,此对象都会相应更改.在改变它之后我需要运行让我们说updateLocalStorage()哪个工作完美.

我的问题是这个流程,我可以为我的ui_states对象创建一个自定义事件,就像每次操作对象时ui_states.addEventListener('onchange', function(){ // do stuff })不运行该updateLocalStorage()函数一样吗?

谢谢.

javascript events event-handling javascript-events

8
推荐指数
1
解决办法
1万
查看次数