/**
*
* 继承:
* 属性的继承:调用父类的构造函数call
* 方法的继承: for in 拷贝继承(jquery)
*
* apply:
方法名A.apply(对象名B, [执行A需要的参数,用数组表示]);
call:
方法名A.call(对象名B, [执行A需要的参数,用逗号分隔]);
apply和call功能是: 执行某一个对象的方法A, 但在执行的时候临时把它内部的this指向一个别的对象B, 后面是执行A要用到的参数.
apply和call作用一样, 区别只不过是参数一个要用数组表示, 一个要用逗号分隔的方式表示. 看例子
拷贝继承:
如何添加继承
属性 call
for in
* 继承的其他形式
* 类继承:利用构造函数(类)的继承
* 属性和方法要分开继承
* 原型继承
* 借助原型来实现对象继承对象
*/
function createperson(name,sex){
this.name = name;
this.sex = sex;
}
createperson.prototype.showname = function(){
alert(this.name);
}
var p1 = new createperson("owl1","男");
p1.showname();
//
function createstar(){//子类
//属性继承
createperson(this,sex,job);
this.job = job;
}
extend(createperson.prorototype,createstar.property);
createstar.prototype.showjob = function(){
}
var p2 = new createstar("city","男","歌手");
//方法继承:
function extend(obj1,obj2){
for(var attr in obj2){
obj1[attr] = obj2[attr];
}
}
//..............................
var a = {
name : "1"
}
var b = {
name : "2"
}
var b = a;
alert(a.name); //2
function extend(obj1,obj2){
for(var attr in obj2){
obj1[attr] = obj2[attr];
}
}
// 类继承
function Aaa(){ //父类
this.name = [1,2,3];
}
Aaa.prototype.showName = function(){
alert( this.name );
};
function Bbb(){ //子类
Aaa.call(this);
}
var F = function(){};
F.prototype = Aaa.prototype;
Bbb.prototype = new F();
Bbb.prototype.constructor = Bbb; //修正指向问题
var b1 = new Bbb();
//b1.showName();
//alert( b1.name );
//alert( b1.constructor );
b1.name.push(4);
var b2 = new Bbb();
alert( b2.name );
// 原型继承
var a = {
name : "owl"
}
var b = cloneObj(a);
b.name = 'city';
alert(b.name); //city
alert(a.name); //owl
function cloneObj(obj){
var F = function(){};
F.prototype = obj;
return new F();
}
javascript 面向对象基础(四)面向对象的继承
最新推荐文章于 2023-02-27 19:00:39 发布