对象的创建和继承

  梳理一下关于对象的基本内容

1.对象创建

  对象有四种创建方式,包括对象直接量、new构造函数、new Object函数、Object.create(父对象,{扩展属性的列表对象})

【对象直接量】

var obj={
    "属性名":值;
    ...
    "方法名":function(){...};
}

【new Object】

var obj=new Object();
obj.属性名=值;
obj.方法名=function(){...};

【new构造函数】

//new创建对象的方法分成2步
//1.创建构造函数
function 构造函数名(属性参数1...){
    this.属性名=属性参数1;
    ...
    this.方法名=function(){
        //操作
    }
}
//2.利用构造函数创建对象
var obj=new 构造函数名();

  【new在此处所做的事情】

    1.创建了一个空对象:var obj={};

    2.用空对象,调用构造函数,构造函数在空对象中添加属性和方法。

    3.设置新对象的_proto_指向构造函数的prototype对象

    (每个对象都有一个_proto_属性,指向该对象的构造函数的原型对象【此对象中包含了各个子对象的公共属性】)

    (每个函数都有一个prototype属性,只有当函数时构造函数时,才有意义)

    4.返回新对象的地址。

2.继承

  【js中所有的继承都是通过原型对象实现的】

  每个函数对象都有一个原型对象。

    构造函数的原型对象负责保存所有子对象的共享成员

  【建议】

    将所有子对象共享的方法,都定义在构造函数的原型对象中。

  【说明】

    所有的内置类型的API都是定义在类型.prototype中

【扩展对象属性】

  1.扩展共有属性:通过构造函数.prototype添加

  2.扩展自有属性:通过某个子对象添加

【判断自有属性和共有属性】

  1.自有属性:obj.hasOwnProperty("属性名");

  2.共有属性:"属性名" in obj(在原型或自己中)&&!obj.hasOwnProperty("属性名") (在自己中没有)

【删除属性】

  delete 对象.属性名

  只能删除自有属性,不能删除共有属性

  全局变量:var n=1;  window.n=1;  window["n"]=1;(可删除)

【原型链】

  所有的父子级对象之间由_proto_形成的多级引用关系---->多级继承

【原型相关API】 

  【获取任意对象的父级原型对象】

    Object.getPrototypeOf(子对象)==>子对象._proto_

  【检查对象2是否是对象1的原型对象】

    父对象.isPrototypeOf(子对象)

原文地址:https://www.cnblogs.com/controlms/p/7767923.html