js面向对象

1、继承

    Person.calll(this,props);
}

调用了Person构造函数不等于继承了Person,Student创建的对象的原型是:
new Student()->Student.prototype->Object.prototype->null
而需要的原型链应该为:
new Student()->Student.prototype->Person.prototype->Object.prototype->null

//定义person构造器
function Person(firstname){
    this.firstname=firstname;
}
Person.prototype.walk=function(){
    console.log("hi,"+this.firstname);
}
Person.prototype.haha=function(){
    console.log("hi,"+this.firstname);
}
function Student(firstname,subject){
    //调用父类构造器
    Person.call(this,firstname);
    //初始化student类特有属性
    this.subject=subject;
}


Student.prototype=Object.create(Person.prototype);

Student.prototype.constructor=Student;

Student.prototype.walk=function(){
    console.log("hello,"+this.firstname);
}

var student1=new Student("LiMing","math");
student1.walk();  //hello,LiMing
student1.haha();  //hi,LiMing

console.log(student1 instanceof Person);  //true
console.log(student1 instanceof Student); //true

在不支持object.create的老javascript引擎中,可以使用一个function来获得相同的返回值

    function ctor(){
            ctor.prototype=proto;
            return new ctor();
    }
}
Student.prototype=createobject(Person.prototype);

为什么不能直接用Student.prototype=Person.prototype?
因为如果是这样的话student和person会共享一个原型对象.也可以中间对象用一个空函数F来实现

// 空函数F:
function F() {}
// 把F的原型指向Student.prototype:
F.prototype = Person.prototype;
// 把Student的原型指向一个新的F对象,F对象的原型正好指向Person.prototype:
Student.prototype = new F();

// 把Student原型的构造函数修复为Student:
Student.prototype.constructor = Student;

2、class 对象

class objname{
    constructor(param1,param2···){
        this.name1=param1;
        this.name2=param2;
        ``````
    }
    funcname(){
    }
}

继承:语法格式类似于c++,记得要使用super来调用父类的构造方法,父类的函数子类可以直接继承

class obj2 extends obj1{
    constructor(param1,param2···){
        super(param1);
        this.name2=param2;
        ``````
    }
    funcname(){
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值