zoukankan      html  css  js  c++  java
  • 使用隐藏的new来创建对象

    jQuery中发现的,jQuery.Event类。估计作者是为了减少代码量。定义一个类,但不用new关键字去创建该类对象,而使用方法调用()方式去创建该对象。

    很多时候我们是这样写类,然后使用new创建对象的。

    function Person(name,age){
        this.name=name;
        this.age=age;
    }
    Person.prototype={
        setName : function(n){this.name=n;},
        getName : function(){return this.name;}
    }
    var p = new Person('jack',25);
    

    改成这样的

    function Person(name,age){
       //条件改为(this==window)或(this==self)或(this.constructor!=Object)
        if(!this.setName){
           return new Person(name,age);
        }
        this.name=name;
        this.age=age;
    }
    Person.prototype={
        setName : function(n){this.name=n;},
        getName : function(){return this.name;}
    }
    var p = Person('jack',25);
    

     注意该类较最上面的写类方式中多了以下

    if(!this.setName){
        return new Person(name,age);
    }
    

    好,创建类的实例(对象)方式也变成了如下

    var p = Person('jack',25);
    

    这种创建方式(函数调用)较上面的少了“new_”,new和空格,实际上是在类内部new了。而这样方式每次创建对象可以减少4个byte。
    如果把类内部的if判断条件换成非prototype上的属性,如this.name。程序会提示出错:too much recursion

    function Person(name,age){
        if(!this.name){
           return new Person(name,age);
        }
        this.name=name;
        this.age=age;
    }
    Person.prototype={
        setName : function(n){this.name=n;},
        getName : function(){return this.name;}
    }
    var p = Person('jack',25);
    
  • 相关阅读:
    浴谷夏令营2017.8.1数论的整理
    BZOJ1483: [HNOI2009]梦幻布丁
    NOIP2014-11-3模拟赛
    BZOJ3884: 上帝与集合的正确用法
    BZOJ4869: [Shoi2017]相逢是问候
    计蒜客NOIP2017提高组模拟赛(三)day1
    NOIP2014-9-6模拟赛
    NOIP2014-7-7模拟赛
    zoj Little Keng(快速幂)
    多校Key Set (快速幂)
  • 原文地址:https://www.cnblogs.com/snandy/p/1992077.html
Copyright © 2011-2022 走看看