实例化构造函数时浏览器报未定义,两段相似Calculator代码为何运行结果不同?
构造函数未定义问题原因
你遇到的问题是同形异义字符导致的标识符不匹配:
- 第一段代码里你定义的构造函数名
Сalculator首字符是西里尔字母「С」(Unicode编码为U+0421),和你实例化时用的拉丁字母「C」(Unicode编码为U+0043)视觉上几乎一致,但在JS语法中属于完全不同的字符。 - 你定义的是西里尔С开头的
Сalculator,但调用new时用的是拉丁C开头的Calculator,JS无法找到对应的构造函数定义,因此抛出未定义的报错。 - 第二段代码的构造函数定义和实例化调用用的都是拉丁C开头的
Calculator,标识符完全匹配,所以可以正常运行。
修复方案
将第一段代码的构造函数名首字母替换为标准拉丁字母C即可,修复后代码如下:
"use strict" function Calculator() { this.read = function() { this.first = +prompt(); this.second = +prompt(); }; this.sum = function() { return this.first + this.second; }; this.mul = function() { return this.first * this.second; }; } let calculator = new Calculator(); calculator.read(); alert(calculator.sum());
内容的提问来源于stack exchange,提问作者Dedak Official
相关产品推荐
相关产品推荐

