日期:2014-05-16 浏览次数:20380 次
JavaScript大牛们,路过请进。有2个JS很核心的问题要提问下。
?
1.请问constructor1.prototype = constructor2.prototype和constructor1.prototype = new constructor2() 的区别
【备注】constructor1和constructor2分别指2个我自己创建的构造函数。如下:
????????????function Person(){ /*coding...*/}
????????????function Man(){ /*coding*/}
????????????Man.prototype = Person.prototype和Man.prototype = new Person()的区别?
?
2.请问JavaScript中子类继承父类时,是将父类里面的方法定义实实在在的拷贝到自己的类定义中吗?我的意思就是问,比如上面的Person中定义了一个公有的方法(可以被继承),那么Man继承了Person后,在Man的类定义中有Person中那个公有方法的定义还是只是一个方法的引用呢???
?
这2个问题困恼了我很久,请神人们赐教。
?
?
?
?
?
function classA() { this.name = 'my name is a'; this.age = 30; } classA.prototype.getAge = function() { return this.age; } classA.prototype.getName = function() { return this.name; } classA.prototype.setAge = function(v) { this.age = v; } classA.prototype.setName = function(v) { this.name = v; } function classB() { this.name = 'my name is b'; this.age = 20; } classB.prototype = classA.prototype; var a = new classA(); var b = new classB(); classA.prototype.getAge = function() { return "I'm " + this.age + " years old."; } alert ( a.getAge() ); alert ( b.getAge() ); 第二:a.prototype = new b() 是指a继承了b的所有方法和属性,如下代码可以证明: [code='javascript'] function classA() { this.name = 'my name is a'; this.age = 30; } classA.prototype.getAge = function() { return this.age; } classA.prototype.getName = function() { return this.name; } classA.prototype.setAge = function(v) { this.age = v; } classA.prototype.setName = function(v) { this.name = v; } function classB() {} classB.prototype = new classA(); var a = new classA(); var b = new classB(); classA.prototype.getAge = function() { return "I'm " + this.age + " years old."; } alert ( a.getAge() ); alert ( b.getAge() );