• Javascript创建类的七种方法


    /* 第一种定义类的方法 */
    var cls = new Object();
    cls.name = "wyf";
    cls.showName = function(){
    console.log(this.name);
    }
    cls.showName();

    /* 第二种定义类的方式 */
    function MyCls(){
    var instance = new Object();
    instance.name = "wyf";
    instance.showName = function(){
    console.log(this.name);
    }
    return instance;
    }
    var cls = new MyCls();
    cls.showName();

    /* 第三种定义类的方式,构造函数方式 */
    function Cls(name){
    this.name = name;
    this.showName = function(){
    console.log(this.name);
    }
    }
    var cls = new Cls("wyf");
    cls.showName();
    var cls1 = new Cls("zz");
    cls1.showName();
    //此种方式和前两种方式有共同的缺点就是 每个对象都会生成showName方法,造成了内存的浪费 。

    /* 第四种定义类的方法,原型方法 */
    function Cls(){}
    Cls.prototype.name = "wyf";
    Cls.prototype.showName = function(){
    console.log(this.name);
    }
    var cls = new Cls();
    cls.showName();
    //此种方法的缺点是,每个对象都指向了内存中同一个属性的地址,修改一个对象的属性值,其它对象的同一个属性的属性值都会变化。

    /* 第五种创建类的方法:结合构造函数和原型方法 */
    function Cls(name){
    this.name = name;
    }
    Cls.prototype.showName = function(){
    console.log(this.name);
    }

    var cls = new Cls("wyf");
    cls.showName();
    var cls1 = new Cls("zz");
    cls1.showName();
    cls.name = "dd";
    cls.showName();
    cls1.showName();

    /* 第六种创建类的方法:Object.create() */
    var Cls = {
    name:"wyf",
    showName:function(){
    console.log(this.name);
    }
    };

    var cls = Object.create(Cls);
    cls.showName();

    var cls1 = Object.create(Cls);
    cls1.name = "test";
    cls1.showName();

    cls.name = "aa";
    cls.showName();
    cls1.showName();
    //此种方法不能实现私有属性和私有方法,实例对象之间也不能共享数据,对"类"的模拟不够全面。

    /* 第七种创建类的方法:极简主义法 */
    var Cls = {
    age:20,//共有属性
    createInstance:function(){
    var cls = {};
    var i = 0;//私有方法
    cls.name = "wyf";
    cls.showName = function(){
    console.log(this.name + " " + i);
    }
    return cls;
    }
    }

    var cls = Cls.createInstance();
    cls.showName();
    var cls1 = Cls.createInstance();
    cls1.showName();
    cls.name = "dd";
    cls.showName();
    cls1.showName();
    //此种方式容易理解,结构清晰。其实此种方式和第二种方式一样。在每个对象内部都生成了一个showName方法。

    转自:https://www.cnblogs.com/wyf-gis/p/4551719.html

  • 相关阅读:
    【AtCoder】ARC067 F
    【AtCoder】ARC095 E
    【BZOJ】4559: [JLoi2016]成绩比较 计数DP+排列组合+拉格朗日插值
    【CodeForces】961 F. k-substrings 字符串哈希+二分
    【CodeForces】961 G. Partitions 斯特林数
    【BZOJ】2310: ParkII 插头DP
    【BZOJ】2331: [SCOI2011]地板 插头DP
    webpack从0开始---(二)
    webpack从0开始---(一)
    前端基础知识(不应需要思考的知识点)三
  • 原文地址:https://www.cnblogs.com/7qin/p/10010208.html
Copyright © 2020-2023  润新知