lxq.link
postscategoriestoolsabout

JavaScript OOP

ES5 OOP

使用new关键字创建

最基础的对象创建方式

var user = new Object();
user.name = "John";
user.age = "23";
user.consoleName = function(){
    console.log("hello"+this.name)
}

使用字面量创建

var user = {
    name: "John",
    age: "23",
    consoleName: function(){
        console.log("hello"+this.name)
    }
}

工厂模式

解决了多个相似对象的创建问题,但是不好区分对象的具体类型

function newUser(name,age){
    var rU = new Object();
    rU.name = name;
    rU.age = age;
    ru.consoleName = function(){
        console.log("hello"+this.name)
    }
    return rU;
}
var John = newUser("John","22");
var Kim = newUser("Kim","23")

构造函数和原型组合模式

这里使用构造函数来定义对象的属性,使用原型来定义共享的属性和方法,这样就可以通过传递不同的参数来创建出不同的对象,同时又拥有了共享的方法和属性。

function User(name,age){
    this.name = name
    this.age = age
};
User.prototype = {
    contructor : User, //显式的指定User.prototype的contructor属性
    alertName: function(){
        alert("hello"+this.name)
    }
};
var John = new User("John","22")
var Kim = new User("Kim","23")

组合继承:

function Super(){
    this.flag = true;
}
Super.prototype.getFlag = function(){
    return this.flag;
}
function Sub(){
    this.subFlag = flase
    Super.call(this)
}
Sub.prototype = new Super;
var obj = new Sub();
Sub.prototype.constructor = Sub; // 让对象的constructor指向其构造函数
Super.prototype.getSubFlag = function(){
    return this.flag;
}
2019-10-31