zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    中文乱码—Servlet—SpringMVC
    (转+整理)C# BinaryFormatter进行序列化与反序列化
    (转)C# 之泛型详解
    (转)C#中base关键字的几种用法
    (转)C# Where关键词的用法
    (转)c# 断言类
    (转+整理)C#中动态执行代码
    (转)c# control.Invoke control.BeginInvoke
    (转)c# String与StringBuilder
    (转)winform之ListView
  • 原文地址:https://www.cnblogs.com/7qin/p/10010208.html
Copyright © 2011-2022 走看看