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上工作正常。
答案 0 :(得分:3)
List<String> newList = new ArrayList<String>(listOne);
newList.addAll(listTwo);
是浏览器中的getter / setter样式属性,可将所有内容转换为 String (成为 Window 的名称 >)
因此window.name
它不能按预期工作,最终会以
var
你需要
name; // "[object Object]"
适用于var
答案 1 :(得分:2)
这是因为javascript名称是内置属性。因此,当您调用name.getName()
时,它实际上将在全局窗口对象上调用,如下所示
window.name.getName()
会抛出错误。除了&#39; name&#39;之外,你需要选择不同的标识符。正确地工作。
答案 2 :(得分:1)
在浏览器中,全局范围引用window
对象,该对象具有名为name
的属性。
如果您在JavaScript中阅读过关于作用域的内容,例如在W3Schools中,您将找到此信息(位于页面底部):
您的全局变量(或函数)可以覆盖窗口变量(或函数)。 任何函数(包括窗口对象)都可以覆盖全局变量和函数。
这意味着,如果您尝试定义已作为全局window
对象的成员存在的任何变量或函数,您将无法执行此操作。当您尝试访问它们时,您将访问全局window
对象成员。
创建对象name === window.name
后,您可以检查是否为true,这意味着它不是您的对象,而是window.name
属性。
您还可以检查在全局范围内创建var时,它是作为窗口成员创建的。即。
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 */
})();
您可以阅读有关此模式的有趣文章here。
在node.js中,全局范围内没有name
,因此您没有这个问题。对this great SO answer中的node.js全局范围有很好的解释。