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);
    
  • 相关阅读:
    用windows脚本实现文件下载
    pku1325 Machine Schedule
    中位数
    pku1468 Rectangles
    最小密度路径
    合并序列
    PowerDesigner(5)转载
    责任链模式
    PowerDesigner(3)转载
    解释器模式
  • 原文地址:https://www.cnblogs.com/snandy/p/1992077.html
Copyright © 2011-2022 走看看