当前位置 : 主页 > 网络编程 > JavaScript >

Javascript创建类型的几种方式

来源:互联网 收集:自由互联 发布时间:2021-06-28
Javascript创建类型的几种方式 /*创建对象 *///logfunction trace(args) { console.log(args); }//1,工厂模式//对象不能被识别, 没办法通过instanceof识别具体对象trace("---------------工厂模式---------------");f
Javascript创建类型的几种方式
/*
创建对象
 */
//log
function trace(args) { console.log(args); }
//1,工厂模式
//对象不能被识别, 没办法通过instanceof识别具体对象
trace("---------------工厂模式---------------");
function createPerson(name, age, job) {
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.sayName = function () {
        trace(this.name);
    };
    return o;
}
var person1 = createPerson("Kun", 18, "小混混");
var person2 = createPerson("test", 20, "战士");
person1.sayName();

//2. 构造函数模式
trace("---------------构造函数模式---------------");
function Person2(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.sayName = function () {
        trace(this.name);
    };
}
var person1 = new Person2("Kun1", 18, "小混混");
var person2 = new Person2("Kun2", 18, "小混混");
person1.sayName();
person2.sayName();
trace(person1 instanceof Person2);

//3. 原型模式
console.log("---------------原型格式---------------");
function Person3() {

}
var __p = Person3.prototype;
__p.name = "Kun";
__p.age = 19;
__p.job = "吹水";
__p.sayName = function () {
  trace(this.name);
};
__p.hasPrototypeProperty = function (name) {
    return !this.hasOwnProperty(name) && name in this;
};
var person1 = new Person3();
var person2 = new Person3();
person1.name = "codekun";
// person1.sayName();
// person2.sayName();
// delete person1.name;
// person1.sayName();
trace(person1.hasOwnProperty("age"));
trace(person1.hasPrototypeProperty("age"));
var a = Object.keys(person1);
trace(a);

//4.组合使用构造函数模式与和原型模式
function Person4(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.friends = ["陈三","李四"];
}
Person4.prototype = {
    constructor : Person4,
    sayName : function () {
        trace(this.name);
    }
}

//5.动态原型模式
function Person5(name, age, job) {
    this.name = name;
    this.age = age;
    this.job;
    if(typeof this.sayName != "function") {
        Person5.prototype.sayName = function () {
            trace(this.name);
        }
    }
}

//6.寄生构造函数模式
function Person6(name, age, job) {
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.sayName = function () {
        trace(this.name);
    };
    return o;
}
网友评论