有人能解释一下这个简单的Javascript行为吗?

3
function cat() {

    this.Execute = new function() {

            alert('meow');

    }

}

var kitty = new cat();

http://jsfiddle.net/PaDxk/1/

为什么会这样呢?我没有告诉它运行这个函数。

注:此内容涉及IT技术,可能需要专业背景知识才能理解。


你的CamelCasing被倒置了。类名应该是UpperCamelCase;其他所有内容都应该是lowerCamelCase。 - SLaks
3个回答

8
当您写入new function() { ... }时,您正在创建一个匿名函数,然后在new表达式中立即调用它。
此表达式的结果是一个对象,即匿名函数创建的类的实例。
这相当于
var anonymous = function() { ... };
this.Execute = new anonymous;

如果那是真的,你应该能够再次调用它 - 但是如果你尝试再次调用kitty.Execute,它不是一个函数。 - NibblyPig
@SLC:不是函数,是new表达式创建的对象。该函数是匿名的;再次调用它的唯一方法是编写kitty.Execute.constructor() - SLaks
我明白了,所以它是一个对象,有道理! :) - NibblyPig

4

使用带有警报的匿名函数作为构造函数(因为有new)。然后this.Execute成为此函数对象的“实例”。


3

由于使用了“new”关键词。

如果您只想分配函数并稍后调用它,则需要像这样使用:

function cat() {

    this.Execute =  function() {  
            alert('meow');    
    }    
}

var kitty = new cat();
kitty.Execute(); 

当你在这种情况下使用 `new` 关键字时,你的函数会表现得好像它是构造函数一样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接