JavaScript面向对象继承原理与实现方法分析面向对象继承原理与实现方法分析
主要介绍了JavaScript面向对象继承原理与实现方法,结合实例形式分析就面向对象程序设计中原形、对象、继
承的相关概念、原理、实现方法及操作注意事项,需要的朋友可以参考下
本文实例讲述了JavaScript面向对象继承原理与实现方法。分享给大家供大家参考,具体如下:
1、构造函数、原型和实例的关系、构造函数、原型和实例的关系
构造函数有一个原型属性prototype指向一个原型对象。
原型对象包含一个指向构造函数的指针constructor 。
实例包含一个指向原型对象的内部指针[[prototype]] 。
2、通过原型链实现继承、通过原型链实现继承
基本思想:利用原型让一个引用类型继承另一个引用类型的属性和方法,子类型可以访问超类型的所有属性和方法。原型链的
构建是将一个类型的实例赋值给另一个构造函数的原型实现的。实现的本质是重写原型对象,代之以一个新类型的实例。
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
alert("Hello, " + this.name);
}
var person = new Person("Alice");
person.sayHello(); // Hello, Alice
function Student() {
}
Student.prototype = new Person("Bruce");
Student.prototype.id = 16;
Student.prototype.showId = function() {
alert(this.id);
}
var student = new Student();
student.sayHello(); // Hello, Bruce
student.showId(); // 16
注意:不能用对象字面量创建原型方法,这样会重写原型链,导致继承无效。
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
alert("Hello, " + this.name);
}
var person = new Person("Alice");
person.sayHello(); // Hello, Alice
function Student() {
}
Student.prototype = new Person("Bruce");
Student.prototype.id = 16;
Student.prototype = {
showId: function() {
alert(this.id);
}
};
var student = new Student();
student.sayHello(); // 报错:student.sayHello is not a function
student.showId(); // 16
student指向Student的原型,Student的原型又指向Person的原型。
student.sayHello()原型链搜索机制:
1)搜索student实例中是否有sayHello()
2)搜索Student.prototype是否有sayHello()
3)搜索Person.prototype是否有sayHello()
子类型有时候需要覆盖超类型的某个方法,或者需要添加超类型中不存在的某个方法。
评论0
最新资源