美文网首页
[JavaScript基础] 原型,原型链,call/apply

[JavaScript基础] 原型,原型链,call/apply

作者: Darkdreams | 来源:发表于2018-12-05 17:33 被阅读0次

    原型 prototype

    1. 定义:原型是function对象的是一个属性,它定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象。

    构造函数的区别:命名大驼峰式

    function Person() {
      //代码
    }
    var person = new Person(); //构造函数产生一个对象
    //构造函数多次调用,可产生多个相似且独立的对象。
    var person1 = new Person();
    ···
    
    1. 利用原型的特点和概念,可以提取共有属性。
    //构造函数
    function Person(name, age) {
        this.name = name;
        this.age = age;
    }
    // 提取原型中相同的属性和方法。
    Person.prototype = {
        height : 180,
        weight : 200,
        say : function() {
            console.log("abcd")
        }
    }
    // 调用构造函数
    var person1 = new Person("abc", 18);
    var person2 = new Person("cba", 28);
    
    1. 对象如何查看原型
      隐式属性__proto__
      每一个对象都有一个隐式的属性,__proto__,且__proto__都指向对象的原型prototype
    Chrome控制台

    __proto__是可修改的,可修改对象指向的原型

    function Person() {
     
    }
    var obj = {
      name: "abc"
    }
    var person = new Person(); //
    person.__proto__ = obj;  //修改person方法原型指向
    console.log(person.name)  //abc
    
    1. 对象如何查看对象的构造函数 constructor
    function Person() {
      
    }
    function Car() {
    
    }
    var car = new Car();
    car.constructor = Person()
    

    原型链

    增、删、改、查

    子孙无法修改父级原型的属性

    Grandpa.prototype.lastName = "Tim";
    function Grandpa() {
    
    }
    var grandpa = new Grandpa();
    
    Father.prototype = grandpa;
    function Father() {
    
    }
    var father = new Father();
    
    Son.prototype = father;
    function Son() {
    
    }
    var son = new Son();
    

    原型链的最顶端指向Object.prototype


    call/apply

    改变this指向

    相同点:

    call()apply()的第一个参数都是改变this指向。

    不同点:

    call() 需要把实参按照形参的个数传进去。

    function Person(name, age) {
      this.name = name;
      this.age = age;
    }
    
    var person = new Person("Tim",20);
    
    function Student() {
      Person.call(this, "Tom",10)
    }
    
    var student = new Student()
    

    apply() 需要传一个arguments数组

    function Person(name, age) {
      this.name = name;
      this.age = age;
    }
    
    var person = new Person("Tim",20);
    
    function Student() {
      Person.apply(this, ["Tom",10])
    }
    
    var student = new Student()
    

    JavaScript可正常计算范围,小数点前16位,后16位。

    相关文章

      网友评论

          本文标题:[JavaScript基础] 原型,原型链,call/apply

          本文链接:https://www.haomeiwen.com/subject/nseqqqtx.html