无法将JavaScript类初始化为name关键字
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();
Uncaught TypeError: name。getName不是函数
如果将对象命名为name并在浏览器上运行,则在浏览器中出现上述错误。它在nodejs上工作得很好。
window.name
是浏览器中的getter/setter样式属性,它将所有内容转换为字符串(作为窗口的名称)
因此,var
不像你期望的那样工作,你最终得到
name; // "[object Object]"
您需要
- 选择不同的标识符以避免此冲突
- 在全局作用域以外的作用域中工作,因此
var
将为name
工作
这是因为在javascript中name是内置属性。所以当你调用name.getName()
时,它实际上会在全局窗口对象上被调用,如下所示window.name.getName()
会抛出一个错误。你需要选择不同的标识符,而不是"name"来正常工作。
在浏览器中,全局作用域指的是window
对象,它有一个名为name
的属性。
如果你读过JavaScript的作用域,例如在W3Schools,你会发现这个信息(在页面底部):
全局变量(或函数)可以覆盖窗口变量(或函数)。任何函数,包括window对象,都可以覆盖全局变量和函数。
这意味着,如果您试图将任何已经存在的变量或函数定义为全局window
对象的成员,您将无法做到这一点。当您尝试访问它们时,您将访问全局window
对象成员。
你可以检查,在创建对象之后,name === window.name
产生true,这意味着它不是你的对象,而是window.name
属性。
你也可以检查当你在全局作用域中创建一个变量时,它是作为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
,因此您没有这个问题。
- 使用“;这个“;JavaScript原型方法中的关键字
- delete关键字在全局变量上的不同行为
- AngularJS单选筛选不适用于Name、Description和Field4复选框值
- JavaScript 中的嵌套函数和 “this” 关键字
- 未捕获的类型错误:无法读取属性'name'即使它存在,也无法定义
- 正在检测导航到<a name=“;最新主题”></a>
- 骨干's Router.execute(callback,args,name)方法获取未定义的名称
- 如何在不使用 new 关键字的情况下从函数创建对象
- Angularjs使用“;这个“;promise内的关键字回调
- 重写需要javascript中带有import关键字的语法
- JavaScript,JQuery.需要帮助才能获得'name'从我的JSON中删除
- Regex,用于从字符串中筛选关键字
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 可以在Javascript中添加新的关键字吗
- 从 Javascript 中设置 ng-model name
- jquery使用name from变量按类选择元素
- javascript中的这个关键字
- Javascript关键字搜索子类Div值
- 无法将JavaScript类初始化为name关键字