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)的原型对象。

  • 相关阅读:
    Object-C支持多继承吗?可以实现多个接口吗?Category是什么?
    Action类为何要继承ActionSupport
    JAVA中的File类
    Oracle中奇怪的【不等于号】
    Oracle中INSTR、SUBSTR和NVL的用法
    【ERROR】Oracle11g两个监听同名进程的故障
    【ERROR】EXP-00091
    【ERROR】while loading shared libraries: /u01/app/oracle/product/11.2.0/lib/libclntsh.so.11.1: cannot
    【js】appendChild
    【js】正则表达式(II)
  • 原文地址:https://www.cnblogs.com/lyc10/p/13227925.html
Copyright © 2011-2022 走看看