无法理解JavaScript中的静态方法
Not able to understand static methods in JavaScript
本文关键字:静态方法 JavaScript 更新时间:2023-09-26
我正在读一本书"Pro JavaScript Technics",其中有一部分解释了如何在JavaScript对象、中实现静态变量
根据这个解释,我写了一个代码。
代码是应该有一个Employee类,我们应该能够从中创建Employee对象。Employee类应该有静态方法作为setter和getter,用于设置员工工作的"公司"的值。
如果静态公司名称更改为其他名称,则必须在所有Employee对象中看到该更改,
代码如下,
var fn46 = function(){
var Employee = (function(){
var fn = function(employeeName){
var name = undefined;
this.setName = function(employeeName){
name = employeeName;
};
this.getName = function(){
return name;
}
this.setName(employeeName);
};
var FIRM = "";
this.setFIRM = function(firmName){
FIRM = firmName;
};
this.getFIRM = function(){
return FIRM;
};
return fn;
})();
Employee.prototype.display = function(){
return "Employee "+this.getName()+" works in "+Employee.getFIRM();
};
var empArray = [ new Employee("Sudarshan Thakur"),
new Employee("Pritesh Shah")
];
Employee.setFIRM("DropBox Inc.");
for(var x=0; x < empArray.length; x++){
print(empArray[x].display());
}
Employee.setFIRM("Yahoo Inc.");
for(var x=0; x < empArray.length; x++){
print(empArray[x].display());
}
};
fn46();
但是当我运行上面的代码时,我在的输出中得到了错误
js: uncaught JavaScript runtime exception: TypeError: Cannot find function setFIRM in object
函数(employeeName){…}。
现在,如果我将代码更改为
var fn46 = function(){
var Employee = (function(){
var fn = function(employeeName){
var name = undefined;
this.setName = function(employeeName){
name = employeeName;
};
this.getName = function(){
return name;
}
this.setName(employeeName);
};
var FIRM = "";
fn.setFIRM = function(firmName){
FIRM = firmName;
};
fn.getFIRM = function(){
return FIRM;
};
return fn;
})();
Employee.prototype.display = function(){
return "Employee "+this.getName()+" works in "+Employee.getFIRM();
};
var empArray = [ new Employee("Sudarshan Thakur"),
new Employee("Pritesh Shah")
];
Employee.setFIRM("DropBox Inc.");
for(var x=0; x < empArray.length; x++){
print(empArray[x].display());
}
Employee.setFIRM("Yahoo Inc.");
for(var x=0; x < empArray.length; x++){
print(empArray[x].display());
}
};
fn46();
我得到想要的输出
Employee Sudarshan Thakur works in DropBox Inc.
Employee Pritesh Shah works in DropBox Inc.
Employee Sudarshan Thakur works in Yahoo Inc.
Employee Pritesh Shah works in Yahoo Inc.
所以我为什么会出错,
我发现的修复方法是正确的,即"fn.setFIRM"answers"fn.getFIRM"使其成为静态方法,或者有一些不同的方法来实现这个
正在等待一些好的解释
如果您检查了第一次尝试的全局对象(窗口),您会看到在那里定义了setFIRM
和getFIRM
方法。
为什么
因为你定义了:
this.setFIRM = function...
当在全局上下文中使用时,this
指向全局对象,而不是像你直观地期望的那样指向Employee
。(除非你在use strict
中,在这种情况下,this
被求值为null/undefined
)
这就是您出现错误的原因,也是更改为fn.setFIRM
修复错误的原因。
相关文章:
- 无法理解JavaScript中的静态方法
- 如何理解“当类实例化时,JavaScript静态方法也是不可调用的”
- Javascript:如何声明非全局静态方法
- JavaScript中的静态方法
- 静态方法中的Javascript“this”
- Javascript 静态方法继承
- 如何获取 javascript 类中的静态方法列表
- 如何在 javascript 中定义静态方法类
- 如何在 Javascript 中同时拥有静态方法和实例方法
- 从JavaScript调用PHP静态方法,而无需中间PHP脚本
- 如何在 JavaScript 中动态创建静态方法
- Javascript类静态方法内存消耗
- 在全局对象中定义的类中的 Javascript 静态方法
- ASP MVC 4,将数据从javascript(View)传递到C#静态方法
- javascript jsdoc命名空间类静态方法
- JavaScript 中构造函数的静态方法模式
- Javascript类扩展:从子类函数调用基类函数:似乎在调用静态方法
- Javascript——如何在不使用新运算符的情况下启用静态方法,同时防止使用实例函数
- JavaScript对象返回静态方法和自己作为方法
- Javascript中'静态方法'