无法将JavaScript类初始化为name关键字

无法将JavaScript类初始化为name关键字,javascript,node.js,Javascript,Node.js,错误 未捕获的TypeError:name.getName不是函数 如果将对象命名为名称并在浏览器上运行,则在浏览器中出现上述错误。它在nodejs上运行良好 window.name是浏览器中的一个getter/setter样式属性,它将所有内容转换为字符串(作为窗口的名称) 因此,varing它不能像您期望的那样工作,您最终会 var NameOne = function (firstName, lastName) { this.firstName =

错误

未捕获的TypeError:name.getName不是函数


如果将对象命名为名称并在浏览器上运行,则在浏览器中出现上述错误。它在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全局范围中的内容,有一个很好的解释