问题描述
function ClassA() {}ClassA.prototype.color = "blue";ClassA.prototype.sayColor = function () { alert(this.color);};function ClassB() {}ClassB.prototype = new ClassA();如果写成以下方式,会有什么问题?function ClassA() { this.color = "blue"; this.sayColor = function(){ alert(this.color); }}function ClassB() {}ClassB.prototype = new ClassA();
解决方案
没有问题啊,这个也是继承,最好在后面加上ClassB.prototype.constructor = Class 。看来你对Javascript中的原型和原性链不太熟,推荐阮一峰的几篇文章http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html
解决方案二:
ClassB.prototype.constructor = Class 在Class 是没法直接访问ClassB 的私有变量的。ClassA.prototype.color = "blue";ClassA.prototype.sayColor = function () { alert(color); 去掉this 就无法找到color};var color = "blue"; this.sayColor = function(){ alert(color); //可以访问私有变量 }