• 原型链


        在讲原型链之前,我们首先要先来明确几个概念:类、对象、构造函数、原型

        类:具有相同特征(属性)和行为(方法)的事物的集合;js中对象的目的实际上就是将具有相同属性和行为的代码整合到一起,方便我们的管理。而构造函数实际上就是创建了一个类。那么如何创建一个构造函数呢,下面我举个例子给大家说明一下。

    function Person(_name,_age,_height){
    	this.name = _name;
    	this.age = _age;
    	this.height = _height;
    	this.walk = function(){
    		console.log("I can walk");
    	}
    }
    var student = new Person("洋洋",18,160);
    console.log(student.height);
    

      注意:构造函数的首字母一定要大写。构造函数的机制是会自动创建一个空对象,与this相关联,并将这个对象作为默认返回值返回。在上面的代码中Person就是一个构造函数,而student就是一个对象。

    var student = new Person("洋洋",18,160);

    student.walk();
    var student1 = new Person("欢欢",19,168);
    student.walk();

        现在我们来看一下student和student1表面上好像没什么问题,先创建对象再调用方法。但是实际上这样做,有一个很大的弊端。那就是对于每一个实例对象,walk()方法都是一模一样的内容,每一次生成一个实例,都必须为重复的内容,多占用一些内存。这样既不环保,也缺乏效率。这时候就该我们的原型出场啦,

    Person.prototype = {	
    	walk:function(){
    		console.log("I can work");
    	}
    }
    

      如果将walk方法写到prototype中就解决了之前的问题,不会每次声明对象,调用walk 方法的时候都会占用内存。

         想必大家对原型这个概念已经有了了解,那么接下来就要引出我们今天讲的重点原型链。什么是原型链呢?所谓原型链指的是当对象尝试获取某个属性或者某个方法时,若该对象的构造函数没有,会到该构造函数的原型中去找,如果原型也没有,会去原型对象的原型去找最终到达Object.prototype。可能现在这句话大家还不能理解,那就举个例子来说明一下,一言不合就举例。

    function Student(_name,_age,_height){
        this.name = _name;
        this.age = _age;
        this.height = _height;
        this.dance = function(){
            console.log("I can dance");
        }
    }
    Student.prototype = {
           dance:function(){
            console.log("I can dance,too");
        }
    }
    var student = new Student("洋洋",18,160);
    student.dance();    

      因为构造函数中有dance()方法,所以打印的结果是:I can dance;

    function Student(_name,_age,_height){
        this.name = _name;
        this.age = _age;
        this.height = _height;
      
    }
    Student.prototype = {
           dance:function(){
            console.log("I can dance,too");
        }
    }
    var student = new Student("洋洋",18,160);
    student.dance();   
    

      因为构造函数中没有dance()方法,而Student的原型中有 walk()方法,所以打印结果是I can dance,too 

    function Person(_name1,_age1,_height1){
    this.name1 = _name1; this.age1 = _age1; this.height1 = _height1; } Person.prototype.dance = function(){ console.log("I can dance") } function Student(_name,_age,_height){ this.name = _name; this.age = _age; this.height = _height; } Student.prototype = new Person("123",12,135) ; var student = new Student("洋洋",18,160); student.dance();

       Student中没有dance()方法,Student中的原型中也没有dance()方法,所以只能去找Person的原型,打印结果为I can dance。

      通过这次的讲解你懂原型链了吗?

      

      

      

  • 相关阅读:
    MySQL-事务原理
    MySQL-索引原理
    SQL-查询前N条记录
    Shell-配置libpath环境变量
    PG-Vacuum
    python连接mysql数据库
    Spark SQL 基本操作
    spark-shell 交互式编程
    Scala统计学生成绩
    Scala模拟图形绘制
  • 原文地址:https://www.cnblogs.com/ydmm/p/6534804.html
Copyright © 2020-2023  润新知