1、原型对象
javaScript、java、C#。。。面向对象;javaScript有些区别!
- 类:模板
- 对象:具体的实例
类是对象的抽象,对象是类的实际表示方式
在javaScript这个需要我们换一下思维方式!
原型:
//__proto__继承
var student = {
name : 'jiang',
age:3,
run : function (){
console.log(this.name + " run ...")
}
};
var xiaoming = {
name : 'xiaoming'
};
//原型对象
//这个时候小明的原型 是student
xiaoming.__proto__ = student; //变相的等于C#、java的继承
var Bird = {
fly:function (){
console.log(this.name + "fly ...")
}
}
//这个时候小明的原型 是Bird
xiaoming.__proto__ = Bird;
通过prototype给Student新增一个方法
function Student(name){
this.name = name;
}
//给Student新增一个方法
Student.prototype.hello = function(){
alert('hello')
};
2、class对象继承
class
关键词,是ES6引入的
//定义一个类、属性、方法
class Student{
//constructor属性用于返回创建该对象的函数,也就是我们常说的构造函数。
constructor(name) {
this.name = name;
}
hello(){
alert("hello");
console.log(this.name);
}
}
var xiaoming = new Student('xiaoming');
xiaoming.hello()
3、继承
class Student{
constructor(name) {
this.name = name;
}
hello(){
alert("hello");
console.log(this.name);
}
}
class XiaoStudent extends Student{
constructor(name,grade) {
super(name);//super是父类的构造方法
this.grade = grade;
}
MyGrade(){
alert("傻了吧唧的");
}
}
var xiaoming = new Student('xiaoming');
var xiaohong = new XiaoStudent('xiaoming',10);
本质:查看对象属性
4、原型链
定义:当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__
隐式原型上查找,即它的构造函数的prototype
,如果还没有找到就会再在构造函数的prototype
的__proto__
中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链
proto