关于JavaScript原型prototype使用的一个疑问
100Continue
2012-11-04
prototype可以使Employee调用Person里面的getName的方法。但是 在getName里面的this,却不是Employee。 而是跳出来所有的if else,走到了最后的那个alert("nothing");并return。 很好奇,this为什么不能去其他的对象类型匹配上呢? 代码如下:
function Person(name, sex) { this.name = name; this.sex = sex; } Person.prototype = { getName:function(){ if(this === Employee) {alert("Employee") return this.name; } else if(this === Person) {alert("Person") return this.name; } else if(this === window) {alert("windows") return this.name; } else if(this === Object) { alert("object") return this.name; } alert("nothing"); return this.name; } } function Employee(name, sex, employeeID) { this.name = name; this.sex = sex; this.employeeID = employeeID; } // 将Employee的原型指向Person的一个实例 // 因为Person的实例可以调用Person原型中的方法, 所以Employee的实例也可以调用Person原型中的所有属性。 Employee.prototype = new Person('vf'); Employee.prototype.getEmployeeID = function() { return this.employeeID; }; var zhang = new Employee("ZhangSan", "man", "1234"); alert(zhang.getName()); // "ZhangSan |
|
shatuo
2012-11-04
在chrome将这个变量打出来你会发现是不一样的
getName:function(){ console.log(this); console.log(Employee); 得到的结果是 Employee {sex: "man", employeeID: "1234", name: "ZhangSan"} function Employee(name, sex, employeeID) { this.name = name; this.sex = sex; this.employeeID = employeeID; } this === Employee 全等操作符得到的结果肯定是false 判断是不是实例应该用instanceof 改成这样 if(this instanceof Employee) 就能达到你的目的了。 |
|
100Continue
2012-11-05
多谢,你的解释很棒。谢谢
|
|
905766491
2012-11-11
这个应该属于面向对象的。不能用等号.
|
|
ricoyu
2013-03-30
首先this是一个对象的实例, 而Employee是它的构造函数, 所以this === Employee肯定等于false, 当然, this == Employee 也是false。因为两者不是一个东西。
|