Javascript 将构造函数赋值给变量。-为什么';使用firefox控制台,这段代码不起作用吗
通过将构造函数赋给变量,我无法使用函数本身实例化对象。为什么 这项工作:Javascript 将构造函数赋值给变量。-为什么';使用firefox控制台,这段代码不起作用吗,javascript,Javascript,通过将构造函数赋给变量,我无法使用函数本身实例化对象。为什么 这项工作: 功能车(){ this.j='j' } var car=新车(); 这不起作用: var io=功能车(){ this.j='j' } var car=新车(); 函数名是变量的名称 var io = function () { this.j = 'j' } var car = new io(); 其他 因为当你这样做的时候: var io = function Car() { ... } 对于所有浏览器,他们都
功能车(){
this.j='j'
}
var car=新车();
这不起作用:
var io=功能车(){
this.j='j'
}
var car=新车();
函数名是变量的名称
var io = function () {
this.j = 'j'
}
var car = new io();
其他
因为当你这样做的时候:
var io = function Car() { ... }
对于所有浏览器,他们都会认为函数名是io
,因为它是这样声明的,因此函数Car()
仅在io
的范围内,而其他函数(即8和更低版本)可能同时适用于Car
和io
,因此我的意思是创建两个独立的对象。在大多数情况下,使用它们没有问题。尽管由于IE的原因,最好是:
var io = function() {
...
}
var car = new io();
或
我个人也认为它们更具可读性和明显性 因为它就是这样工作的。您直接向函数引用声明
io
。因此,在功能体本身的范围之外没有Car
功能
您可以访问函数体内部的Car
,例如,可能是递归算法
Javascript允许您命名函数,因为您可能需要它(递归,duh),但只存在包含函数引用的
io
。我得到“ReferenceError:Car未定义”这个问题需要更多的投票……命名函数表达式有一个明确定义的行为。的确,IE在NFE方面存在一些问题,但它们在所有其他浏览器中都能正常工作。@FelixKling我知道,我直观地解释了为什么有些浏览器在这种情况下既适用于Car
又适用于io
,尽管io
是我们的参考。但是是的,我主要不推荐NFE,因为IE的问题。如果是这样的话,你介意更详细地描述一下这个问题吗?这并不是说该功能可以作为io或Car使用。在所有浏览器中,它都可以作为io使用,但IE8及以下版本也将创建一个功能车。你的描述听起来比实际情况更糟;)
var io = function() {
...
}
var car = new io();
function Car() {
...
}
var car = new Car();