无法将JavaScript类初始化为name关键字
错误 未捕获的TypeError:name.getName不是函数无法将JavaScript类初始化为name关键字,javascript,node.js,Javascript,Node.js,错误 未捕获的TypeError:name.getName不是函数 如果将对象命名为名称并在浏览器上运行,则在浏览器中出现上述错误。它在nodejs上运行良好 window.name是浏览器中的一个getter/setter样式属性,它将所有内容转换为字符串(作为窗口的名称) 因此,varing它不能像您期望的那样工作,您最终会 var NameOne = function (firstName, lastName) { this.firstName =
如果将对象命名为名称并在浏览器上运行,则在浏览器中出现上述错误。它在nodejs上运行良好
window.name
是浏览器中的一个getter/setter样式属性,它将所有内容转换为字符串(作为窗口的名称)
因此,var
ing它不能像您期望的那样工作,您最终会
var NameOne = function (firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
NameOne.prototype.getName=function(){
console.log(this.firstName+' '+this.lastName);
}
var name = new NameOne('Prashant','Jain');
name.getName();
你也需要这样做
- 请选择其他标识符以避免此冲突
- 在全局范围以外的范围内工作,因此
将适用于var
name
窗口。name
是浏览器中的一个getter/setter样式属性,它将所有内容转换为字符串(作为窗口的名称)
因此,var
ing它不能像您期望的那样工作,您最终会
var NameOne = function (firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
NameOne.prototype.getName=function(){
console.log(this.firstName+' '+this.lastName);
}
var name = new NameOne('Prashant','Jain');
name.getName();
你也需要这样做
- 请选择其他标识符以避免此冲突
- 在全局范围以外的范围内工作,因此
将适用于var
name
这是因为javascript中的名称是内置属性。因此,当您调用
name.getName()
时,它实际上会在全局窗口对象上被调用,如下所示
window.name.getName()
将引发错误。您需要选择“名称”以外的其他标识符才能正常工作 这是因为javascript中的名称是内置属性。因此,当您调用name.getName()
时,它实际上会在全局窗口对象上被调用,如下所示
window.name.getName()
将引发错误。您需要选择“名称”以外的其他标识符才能正常工作 在浏览器中,全局范围指的是窗口
对象,该对象具有名为名称
的属性
如果您阅读了JavaScript中的作用域,例如,在中,您会发现以下信息(在页面底部):
全局变量(或函数)可以覆盖窗口变量(或函数)。
任何函数,包括窗口对象,都可以覆盖全局变量和函数
这意味着,如果您试图定义作为全局窗口
对象的成员而存在的任何变量或函数,您将无法执行此操作。当您尝试访问它们时,您将访问全局窗口
对象成员
在创建对象name==window.name
后,您可以检查是否生成true,这意味着它不是您的对象,而是window.name
属性
您还可以检查,无论何时在全局范围中创建var,它都是作为窗口的成员创建的。i、 e
name; // "[object Object]"
要解决这个问题,您需要确定变量的范围。JavaScript只在函数体中创建新的作用域。因此,创建自己的作用域的一种方法是使用“自动执行匿名函数”模式,如下所示:
var x = 22;
window.hasOwnProperty('x'); // returns true
console.log(window.x); // you'll see 22 in your console
您可以阅读一篇关于此模式的有趣文章
在node.js中,全局范围中没有
名称
,因此您不会遇到这个问题。关于node.js中的全局范围有一个很好的解释。在浏览器中,全局范围指的是窗口
对象,它有一个名为名称
的属性
如果您阅读了JavaScript中的作用域,例如,在中,您会发现以下信息(在页面底部):
全局变量(或函数)可以覆盖窗口变量(或函数)。
任何函数,包括窗口对象,都可以覆盖全局变量和函数
这意味着,如果您试图定义作为全局窗口
对象的成员而存在的任何变量或函数,您将无法执行此操作。当您尝试访问它们时,您将访问全局窗口
对象成员
在创建对象name==window.name
后,您可以检查是否生成true,这意味着它不是您的对象,而是window.name
属性
您还可以检查,无论何时在全局范围中创建var,它都是作为窗口的成员创建的。i、 e
name; // "[object Object]"
要解决这个问题,您需要确定变量的范围。JavaScript只在函数体中创建新的作用域。因此,创建自己的作用域的一种方法是使用“自动执行匿名函数”模式,如下所示:
var x = 22;
window.hasOwnProperty('x'); // returns true
console.log(window.x); // you'll see 22 in your console
您可以阅读一篇关于此模式的有趣文章
在node.js中,全局范围中没有名称
,因此您不会遇到这个问题。对于中node.js全局范围中的内容,有一个很好的解释