OOP-2

作者: 小冷哥WW | 来源:发表于2018-11-26 08:32 被阅读0次

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。


    构造函数:constructor

    构造函数就是一个函数。和普通函数有一些区别。
    函数的内部使用this的关键字。
    首字母是大写的。
    使用的时候要用new操作符创建实例对象。
    

    原型:prototype

    原型是一个对象,称为原型对象。
    构造函数创建实例对象,构造函数具有原型,实例对象也具有原型。实例对象的原型指向构造函数的原型。这就是原型链。
    

    原型链:

    proto:

    每一个实例对象都具有的私有属性。指向自己的原型。
    constructor: 构造器。指向自己的构造函数。


    new :

    创建对象实例。
    防止漏掉new造成错误:
    在构造函数内部使用严格模式。
    使用instanceof在内部判断。判断是否为当前对象的实例。
    使用new.target 在内部判断,new.target指向自己的构造函数。
    

    new的深入操作:

    1.创建一个空对象,作为将要返回的对象实例。
    2.将这个空对象的原型,指向构造函数的prototype属性。 
    3.将这个空对象赋值给函数内部的this关键字。
    4.开始执行构造函数内部的代码。
    5.将对象实例返回
    

    构造函数里面的return语句:

    如果return的是普通数据类型。那么相当于没写。
    如果返回的是this,那么返回的与本身返回的是一样的。
    如果返回的是一个其他对象。那么结果返回的就是这个对象。所以在构造函数内部返回对象要小心。
    

    任何一个函数都可以使用new。返回值都是一个对象。
    如果这个函数是一个构造函数的话,返回的是这个函数的实例。
    如果函数是一个普通函数,那么返回的是一个空的对象。


    Object对象,是所有JS对象的基础。
    Object 的原型指向null。一切对象的基础是null,null也叫空。


    Object.create();

    有的时候我们拿不到对象的构造函数。可以根据这个对象的某一个实例去创建一个对象。


    对于对象来说,每一个属性 其实都有四个描述。

    value        值
    enumerable   枚举  遍历  for in
    configurable 修改
    writable     删除
    后面三个默认值都是true。
    

    Object.getPrototypeOf(obj)
    获取obj对象实例的原型

    Object.prototype.isPrototypeOf() 判断该对象是否为参数对象的原型
    console.log(Array.prototype.isPrototypeOf(b));

    obj1.isPrototypeOf(obj2)
    判断obj2的原型是否是obj1。

    Object.getOwnPropertyNames() 成员是参数对象本身的所有属性的键名,不包含继承的属性键名。

    Object.prototype.hasOwnProperty() 用于判断某个属性定义在对象自身,还是定义在原型链上。

    相关文章

      网友评论

          本文标题:OOP-2

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