[英]Unable to initialize JavaScript Class to name keyword
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();
错误
未捕获的TypeError:name.getName不是一个函数
如果将对象命名为名称并在浏览器上运行,则在浏览器中出现上述错误。 在nodejs上运行正常。
window.name
是浏览器中的getter / setter样式属性,它将所有内容都转换为String (成为Window的名称 )
因此var
荷兰国际集团,你期望它不工作,你结束了
name; // "[object Object]"
您将需要
var
将为name
工作 这是因为javascript名称是内置属性。 因此,当您调用name.getName()
,它将实际在window.name.getName()
下面的全局窗口对象上调用,这将引发错误。 您需要选择除“名称”以外的其他标识符才能正常工作。
在浏览器中,全局范围是指window
对象,该对象具有名为name
的属性。
如果您阅读了有关JavaScript范围定义的信息,例如W3Schools中的信息 ,您将在页面底部找到以下信息:
您的全局变量(或函数)可以覆盖窗口变量(或函数)。 任何函数,包括窗口对象,都可以覆盖全局变量和函数。
这意味着,如果您尝试定义已经作为全局window
对象的成员而存在的任何变量或函数,则将无法执行此操作。 尝试访问它们时,将访问全局window
对象成员。
创建对象name === window.name
后,您可以检查是否产生true,这意味着它不是您的对象,而是window.name
属性。
您还可以检查是否在全局范围内创建var时是否将其创建为window的成员。 即
var x = 22;
window.hasOwnProperty('x'); // returns true
console.log(window.x); // you'll see 22 in your console
要解决此问题,您需要确定变量的范围。 JavaScript仅在函数体内创建新作用域。 因此,创建自己的范围的一种方法是使用“自我执行匿名函数”模式,如下所示:
(function(){
/* new scope: variables are created here without window global object
* interference. You can still access globlas using window.globalName */
})();
您可以在此处阅读有关此模式的有趣文章。
在node.js中,全局作用域中没有name
,因此您没有这个问题。 在这个很棒的SO答案中 ,对node.js全局范围中的内容有很好的解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.