javascript 类的创建/继承方式

类的创建方式:

1、工厂模式:在构造函数里定义一个对象,最后return这个对象。

function app(name,age,job){
    var obj = {
        name: name,
        age: age,
        job: job
    }
    return obj;
  }
var myObj  =  app("bill",32,"engineer");
console.log(myObj.name)   //bill​

2、原型模式:让所有的对象实例共享原型属性和方法。

每个函数都有一个prototype属性,这个属性指向通过调用构造函数创建的那个对象实例的原型对象。Func.prototype --> new Func()的原型对象

function Person(){}
Person.prototype.name = "bill";
Person.prototype.age = 32;
Person.prototype.job = "teacher";

var pers1 = new Person();
var pers2 = new Person();
//pers1与pers2共享​Person.prototype上的属性和方法,在一个对象上作原型属性的改变会影响另一个对象。​

3、动态原型模式:

将信息都封装在构造函数内部,通过条件判断,在必要时再初始化原型。

function Person(name, age,job){
    this.name = name;
    this.age = age;
    this.job = job;
 }
if( typeof this.sayName != "function"){
    Person.prototype.sayName = function(){
        alert(this.name!);
     };
 }

4、寄生构造函数模式:

除了用构造函数封装对象,并用new调用该构造函数,其它与工厂模式完全相同。

function Person(name,age,job){
    var obj = {
        name: name,
        age: age,
        job: job
    }
    return obj;
  }
var myObj  =  new Person("bill",32,"engineer");
console.log(myObj.name)   //bill

5、稳妥构造函数模式:

与寄生构造函数类似,不同点在于:新创建对象的实例方法不引用this;不适用new操作符调用构造函数。

function Person(name,  age, job){
    var obj = new Object();
    obj.sayName = function(){
     alert(name); 
     }
    return obj;
 }
var friend = Person("bill", 43, "student");
friend.sayname() //稳妥构造函数中,只有此方法可以访问到name属性。

类的继承:

1、借用构造函数继承,也叫做经典继承/伪造对象。

fucntion Super(){
    this.colors = ["red", "yellow", "green"]
 }
function Sub(){
    Super.call(this); //Sub调用了Super方法,那么Sub就继承了Super的方法和属性。
 }
var instance1 = new Sub();
instance1.colors.push("black") //"red", "yellow", "green","black"

var instance2 = new Sub();
instance1.colors //"red", "yellow", "green"

​也就是说,两个通过Sub构造函数创建的对象实例,每个都能获得继承来的一份副本,修改继承来的属性不影响源属性。

2、组合继承:伪经典继承。将原型链和借用构造函数继承结合在一起。

function Super(name){
    this.name = name;
    this.colors = ["red", "yellow", "green"];
}
Super.prototype.sayName = function(){
    alert(this.name); 
}

function Sub(name, age){
    Super.call(this, name); //继承Super的name属性
    this.age = age;
}
Sub.prototype = new Super();  //Sub的原型对象是Super的实例。Sub继承Super的属性和方法。
Sub.prototype.constructor = Sub;
​Sub.prototype.sayAge = function(){
    alert(this.age);
}​

3、原型式继承
4、寄生式继承
5、寄生组合式继承

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值