面向对象的两个概念:
-
类:模板
-
对象:实例
proto 指向
在java中若一个对象想要使用另一个对象内部的方法,可以使用extend
继承
在JS中,对象有一个__proto__
方法,可以指向自己的原型对象,从而使用其原型对象的某些方法,达到继承的效果
var person={
name:'mosang',
age:20,
sex:'男',
run:function (){
console.log('run...');
}
}
var mosang={
name:'mosang'
}
mosang.__proto__=person;
在mosang
这个对象中,重写了一个name
属性,并指向了自己的原型对象person
proto可以用来多次指向
var person={
name:'person',
age:20,
sex:'男',
run:function (){
console.log(this.name+' run...');
}
}
var bird={
run:function (){
console.log(this.name+' fly...');
}
}
var mosang={
name:'mosang'
}
mosang.__proto__=person;
console.log(mosang.run());
mosang.__proto__=bird;
console.log(mosang.run());
class 继承
class
关键字是ES6新引入的
class Student{
//构造体提取参数后自动生成属性
constructor(name) {
this.name=name;//属性赋值
}
hello(){
//在类中调用构造器定义的属性需要加this
alert(`${this.name} hello`);
}
}
var a=new Student('a');
a.hello();
var b=new Student('b');
b.hello();
若一个学生想要继承学生类则使用extends
继承即可
class Student {
//构造体提取参数后自动生成属性
constructor(name) {
this.name=name;//属性赋值
}
hello(){
console.log(`${this.name} hello`);
}
}
class student1 extends Student{
constructor(name,id) {
super(name)
this.id=id;
}
}
var xiaoming=new student1('xiaoming','00001');
原型链
所有的类的原型类都是Object,而Object的原型指向了Object的一个构造函数,构造函数又生成了一个Object对象,是一种循环,构成了一个链式结构