面向对象编程
6.1、什么是面向对象
javascript、java、c#、c++……面向对象,javascript有些区别
- 类:模板
- 对象:具体的实例
使用原型__proto__
<script>
var Student={
name:"jiangyou",
age: 12,
run:function () {
console.log(this.name+"run...");
}
};
var xiaoming={
name:"xiaoming"
};
//小明的原型是Student
xiaoming.__proto__=Student;
</script>
原型方式不建议使用
<script>
function Student(name){
this.name=name;
}
//给student新增一个方法
Student.prototype.hello = function(){
alert('Hello')
};
</script>
Class继承(建议使用,规范型)
class关键字,是在ES6引入的
1、定义一个类,属性,方法
//定义一个学生的类
class Student{
constructor(name) {
this.name=name;
}
hello(){
alert('hello')
}
}
var xiaoming =new Student("xiaoming");
var xiaohong =new Student("xiaohong");
2、继承
<script>
class Student{
constructor(name) {
this.name=name;
}
hello(){
alert('hello')
}
}
class XiaoStudent extends Student{
constructor(name,grade) {
super();
this.grade=grade;
}
myGreade(){
alert('小学生你好')
}
}
var xiaoming =new Student("xiaoming");
var xiaohong =new XiaoStudent("xiaohong",1);
</script>
本质:查看对象原型
原型链
__proto__:简单的回顾一下构造函数、原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函赦的指打而实例都包含一个指向原型对象的内部指针。那么假如我们让原型对象等于另一个类型的实例,结果会怎样?显然,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针。假如另一个原型又是另一个类型的实例,那么上述关系依然成立。如此层层递进,就构成了实例与原型的链条。这就是所谓的原型链的基本概念。——摘自《javascript高级程序设计》
其实简单来说,就是上述四-五的过程。
摘录自遇见狂神说,仅供自己学习使用