Javascript类的继承是通过constructor和prototype来实现的
[size=small]1. 定义一个形如java的person类,然后实例化和调用它的属性[/size]
执行结果是:
vulnerability
[size=small]2. 定义一个person的子类man[/size]
prototype是设置在class上而不是实例化过的对象中
执行结果是:
The man is showing himself
[size=small]3. 拿一个未设置的属性[/size]
js解析器会从首先从当前对象去找这个属性,如果没有则顺着其原型对象链(prototype chain)去找这个属性值,如果翻遍了还没有,返回undefined。
执行结果是:
vulnerability
[size=small]4. 设置属性[/size]
js在当前对象增加(更新)该属性,所以是在m1上设置。而原型对象的属性没有被改变
执行结果是:
susceptibility
vulnerability
[size=small]5. 设置原型对象的属性[/size]
原型对象的属性被改变,但是子类对象没有。
执行结果是:
susceptibility
changed value
[size=small]1. 定义一个形如java的person类,然后实例化和调用它的属性[/size]
// Define a so called class
var person = function() {
this.name = "vulnerability";
this.age = 28;
}
// Instantiate the class
var p1 = new person();
alert(p1.name);
执行结果是:
vulnerability
[size=small]2. 定义一个person的子类man[/size]
var man = function() {
this.show = function() {
alert("The man is showing himself");
}
}
// Let the man extend the person
man.prototype = p1;
// Instantiate the man class
var m1 = new man();
// Invoke the show method
m1.show();
prototype是设置在class上而不是实例化过的对象中
执行结果是:
The man is showing himself
[size=small]3. 拿一个未设置的属性[/size]
alert(m1.name);
js解析器会从首先从当前对象去找这个属性,如果没有则顺着其原型对象链(prototype chain)去找这个属性值,如果翻遍了还没有,返回undefined。
执行结果是:
vulnerability
[size=small]4. 设置属性[/size]
// Set the property of the instance of subclass
m1.name = 'susceptibility';
// Verify whether the property has been set to the instance
alert(m1.name);
// Verify whether the property of the instance of prototype
// has been modified
alert(p1.name);
js在当前对象增加(更新)该属性,所以是在m1上设置。而原型对象的属性没有被改变
执行结果是:
susceptibility
vulnerability
[size=small]5. 设置原型对象的属性[/size]
// Set the property of the prototype of man
man.prototype.name = 'changed value';
// The property of the instance of subclass wouldn't be changed
alert(m1.name);
// The property of the prototype has been changed
alert(p1.name);
原型对象的属性被改变,但是子类对象没有。
执行结果是:
susceptibility
changed value