• 使用隐藏的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);
    
  • 相关阅读:
    JEECG 不同(角色的)人对同样的字段数据,使用不同的字段验证规则
    CRM系统设计方案
    MySql concat与字符转义
    MYSQL 三元 函数
    Linux watchdog
    Prometheus & SoundCloud
    Docker存储驱动Device Mapper,Overlay,AUFS
    linux的nohup命令
    Eclipse Todo Tasks 任务试图
    Mysql drop function xxxx ERROR 1305 (42000): FUNCTION (UDF) xxxx does not exist
  • 原文地址:https://www.cnblogs.com/snandy/p/1992077.html
Copyright © 2020-2023  润新知