创建自定义对象的方法:

1.工厂模式

优点:能够批量创建对象。
缺点:会为每一个对象添加上方法。

function createCat(name, age, color) {
            var cat = new Object();
            cat.name = name;
            cat.age = age;
            cat.color = color;
            cat.catchM = function () {
                return this.name + '在抓老鼠';
            };
            return cat;
        }
        var cat1 = createCat('咪咪', 1, '白色');
        var cat2 = createCat('喜喜', 2, '黄色');
       
        console.log(cat1.catchM()==cat2.catchM())//false
       
        console.log(cat1);

2.构造函数模式:

构造函数需要实例化,需要使用new关键字。

function dog(name, age, color) {
            this.name = name;
            this.age = age;
            this.color = color;
            this.run = function () {
                console.log( this.name + '在奔跑');
            }
        }
        var dog1 = new dog('xixi', 1, 'white');
        console.log(dog1);

      
  var dog2 = new dog('tt', 1, 'black');
        console.log(dog2);
        console.log(dog1.run());
        console.log(dog2.run() == dog1.run())//flase

工厂模式与构造函数的区别:
①构造函数不需要return语句。
②构造函数没有显式的创建对象。
③构造函数直接将属性和方法赋给了this对象。

3.原型模式:

function book() {

        } 
        book.prototype.name = 'javascript';
        book.prototype.page = 600;
        book.prototype.look = function () {
            console.log(this.name)
        }
        var o1 = new book();
        o1.name='java';
        o1.page=200;
        console.log(o1);
        o1.look();

        var o2 = new book();
        o2.name='javaaaa'
        console.log(o2);
        o2.look();

console.log(o1.look == o2.look)//true


     
function book() {
        
        } 
        book.prototype.name = 'javascript';
        book.prototype.page = 600;
        book.prototype.fri=[1,2,3]      
        book.prototype.look = function () {
            console.log(this.name)
        }
        
        var o1 = new book();
        o1.name='java';
        o1.page=200;
        o1.fri=[1,2,3];

如果这里是o1.fri.push(4);那么console.log(o1.fri == o2.fri)//true。
因为被改变的fri属性是属于book.prototype的。

    var o2 = new book();
    console.log(o1.fri == o2.fri)//flase

4.混合模式:组合使用构造函数模式和原型模式

将属性放入构造函数中;
将方法放入原型中;
每个实例都有自己的属性,同时又共享了方法,最大限度的节省了内存,而且还支持构造函数传参。

  function book(name, page) {
            this.name = name;
            this.page = page;
        }
        book.prototype.look = function () {
            console.log(this.name + '看书')
        }
        var o1 = new book('jav', 200);
        o1.look();
        var o2 = new book('javaaa', 300);
        console.log(o2);
        o2.look();
     console.log(o1.look == o2.look);//true

5.json格式创建对象

   var cup = {
            name: '青花',
            age: 2,
            drink: function () {
                console.log('heshui')
            }
        }
        cup.drink();
     console.log(cup.name);
上一篇:golang 在 Mac , Linux , Windows 下交叉编译


下一篇:使用Collections给集合排序