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);

本质:查看对象属性image-20201203185144568.png

4、原型链

定义:当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造函数的prototype__proto__中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链
proto
20180620134143385.png

最后修改:2021 年 10 月 15 日
如果觉得我的文章对你有用,请随意赞赏