对象的创建和继承
梳理一下关于对象的基本内容
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(子对象)