zoukankan      html  css  js  c++  java
  • 对象构造器与原型

    每个原型链的终点为Object,Object的原型为null.

    -------------------------------------------------------------------

    1.每个函数都有一个prototype属性指向原型对象。

    2.函数的原型对象开始时只有constructor属性,当函数作为构造函数时,constructor属性指向原函数

    3.使用构造函数创建对象实例时:

    1)创建一个空对象{}

    2)空对象{}的原型为构造函数的prototype属性指向的原型对象

    3)  将创建的对象传递给函数的隐式参数this

    4)  this指向的对象构造函数的上下文,并通过this初始化实例对象。

    5)继承:

      1)通过对象直接继承。objectA想继承objectB,则可以通过内置方法Object.setPrototypeOf(objectA, objectB),将objectA的原型指向objectB

      2)通过构造函数继承。(JS的继承真的太绕了,虽然是继承,但是继承得不明显)

    function Person(name){
        this.name = name
    }    
    
    Person.prototype.eat = function(food){
        console.log("i'm eating" + food)  
    }
    var humnen = new Person("Jone");
    hunmen.eat("beef")
    //Person构造方法中并没有eat方法。
    //Person原型中有eat方法,所以humen对象可以在原型链中找到eat方法,相当于从Person.prototype对象中继承了eat方法。

      3)给构造函数添加方法即可实现类的静态方法。函数为一类对象

    function Person(age){
       this.age = age      
    }
    
    Person.compareAge = function(p1, p2){
      return p1.age - p2.age;  
    }
    

    6)通过Object.defineProperty(Person, "height", {

      configurable: false,

      enumerable: false,

      value: 180,

      writable: true

    })

    配置对象的属性,以及getter, setter函数

    7)humern instanceof Person 中 instanceof运算符是根据运算符左边的对象(humen)的原型链中是否存在运算符右边的构造函数(Person)的原型对象。

  • 相关阅读:
    .NET内存管理、垃圾回收
    C#容器类,性能介绍
    与LINQ有关的语言特性
    IMEI
    IMSI
    无源码调试smali
    IDA远程调试 在内存中dump Dex文件
    error C4996: 'scanf': This function or variable may be unsafe.
    vue 用axios实现调用接口下载excel
    读《JavaScript权威指南》笔记(三)--对象
  • 原文地址:https://www.cnblogs.com/lyc10/p/13227925.html
Copyright © 2011-2022 走看看