javascript对象的继承和Object对象
对象的一个类可以从现有的类中派生,并且拥有现有的类的方法或是属性,这和过程叫做继承。被继承的类叫做父类或是基类,继承的类叫做子类。
(一个对象拥有另一个对象的属性和方法)
优点:
提高代码的重用性
提高代码的可维护性
提高代码的逻辑性
一、Object对象
var obj=new Object()
属性:
1.constructor (Object 的属性)
对创建对象的函数的引用(指针)。
var obj=new Object();
alert(typeof obj);
alert(obj.constructor);//function
2.//Prototype 原型 (函数的默认属性,函数属性就是对象的原型)
var obj=new Object();
function fun(){}
alert(obj.prototype);//undefined
alert(fun.prototype);//object
**********************************************
prototype对函数对象的对象原型的引用。是函数对象的默认属性
**********************************************
A.对象的共享属性存放到代码段当中。
B.可以实现继承。
方法:
A。hasOwnProperty(property)
判断对象是否有某个特定的属性
var obj=new Fun();
function Fun(){
this.name='er'
}
obj.hasOwnProperty('name');
B.IsPrototypeOf(object)
判断该对象是否为另一个对象的原型。(用来检测对象的类型)
var arr=new Array();
alert(Array.prototype.isPrototypeOf(arr));
var obj=new Fun();
function Fun(){
this.name='er'
}
alert(Fun.prototype.isPrototypeOf(obj));
c.运算符
instanceof
var obj=new Fun();
function Fun(){
this.name='er'
}
alert(obj instanceof Fun);
二、继承
1.原型继承
function Person(){
this.name='saner';
this.fun=function(){alert(this.name)}
}
function Student(){}
Student.prototype=new Person();
alert(Student.fun());
//stu 是不是 Person的子类
alert(Person.prototype.isPrototypeOf(stu));
// stu 的对象类型是否相同;
alert(stu instanceof Person);
2.对象冒充的形式
A.call
obj1.fun.call(obj2,[参数1......])
obj1冒充obj2
function Person(){
this.names='saner';
this.fun=function(){alert(this.names)}
}
function Student(){this.names='lisi'}
var stu=new Student();
var per=new Person();
per.fun.call(stu);//stu对象可以寄生per 只能执行per 中的方法
alert(stu instanceof Person);//对象类型是否一样
alert(Person.prototype.isPrototypeOf(stu))//stu是否是Person的子类;
stu.fun();//stu中并没有fun 函数,它只是寄生与Person对象,执行Person 的函数;
...........
-------------------以下是另一种写法---------
function Person(){
this.names='saner';
this.fun=function(){alert(this.names)}
}
function Student(){
this.names='lisi';
Person.call(this);//执行的完全是Person 的方法;
}
alert(stu instanceof Person);
alert(Person.prototype.isPrototypeOf(stu))
stu.fun();//可以调到fun方法 但是与Person并没有继承关系;
stu.names;//也可以执行Person中的属性;
B.apply
obj1.fun.call(obj2,[参数1,参数2....])
让对象1的方法冒充成对象2的方法。
网友评论