`

使用隐藏的new来创建对象

阅读更多
JQ中发现的,jQuery.Event类。估计作者是为了减少代码量。定义一个类,但不用new关键字去创建该类对象,而使用方法调用()方式去创建该对象。
很多时候我们是这样写类,然后使用new创建对象的。
1
function Person(name,age){
2
    this.name=name;
3
    this.age=age;
4
}
5
Person.prototype={
6
    setName : function(n){this.name=n;},
7
    getName : function(){return this.name;}
8
}
9
var p = new Person('jack',25);
改成这样的
01
function Person(name,age){
02
   //条件改为(this==window)或(this==self)或(this.constructor!=Object)
03
    if(!this.setName){
04
       return new Person(name,age);
05
    }
06
    this.name=name;
07
    this.age=age;
08
}
09
Person.prototype={
10
    setName : function(n){this.name=n;},
11
    getName : function(){return this.name;}
12
}
13
var p = Person('jack',25);
注意该类较最上面的写类方式中多了以下
1
if(!this.setName){
2
    return new Person(name,age);
3
}
好,创建类的实例(对象)方式也变成了如下
1
var p = Person('jack',25);
这种创建方式(函数调用)较上面的少了“new_”,new和空格,实际上是在类内部new了。而这样方式每次创建对象可以减少4个byte。
如果把类内部的if判断条件换成非prototype上的属性,如this.name。程序会提示出错:too much recursion
view sourceprint?
01
function Person(name,age){
02
    if(!this.name){
03
       return new Person(name,age);
04
    }
05
    this.name=name;
06
    this.age=age;
07
}
08
Person.prototype={
09
    setName : function(n){this.name=n;},
10
    getName : function(){return this.name;}
11
}
12
var p = Person('jack',25);
分享到:
评论

相关推荐

    ATL 揭秘之“对象创建”篇

    虽然我们在代码中没有显式使用`new`关键字来创建对象,但实际上ATL会在内部调用`new`来分配内存。对象工厂通过调用`CComObject<T>::CreateInstance`来创建对象,这实际上会触发C++的`new`操作符。 **4.3 初始化** ...

    一、JavaScript 创建对象

    JavaScript提供了多种创建对象的方法,包括字面量语法、构造函数、对象原型、工厂函数、模块模式以及近年来引入的类(Class)语法。这篇博客将深入探讨这些方法,帮助你更好地理解和掌握JavaScript中的对象创建。 ...

    JavaScript学习之二 — JavaScript创建对象的8种方式

    这是最简单直接的创建对象的方式,通过大括号{}来定义一个对象,然后在内部用逗号分隔各个属性和方法。 ```javascript var obj = { name: 'Alice', age: 25, sayHello: function() { console.log('Hello!'); ...

    c++中由类名(string)创建这个类对象(RTTI)

    这时,我们需要使用`dlopen`(Unix-like系统)或`LoadLibrary`(Windows)这样的函数,以及相应的函数指针绑定方法来根据字符串创建对象。 - **元类或元对象协议**:在某些框架(如Qt)中,存在元类系统,可以解析...

    在Java中优雅而简洁的创建对象的方法总结

    - **工厂方法**:通过工厂类来创建对象,可以隐藏对象创建的细节,提高代码的可维护性。 - **依赖注入**:框架如Spring提供依赖注入功能,可以通过配置文件或注解将依赖关系注入到对象中,简化对象的创建和管理。 ...

    dotnet C# 只创建对象不调用构造函数方法.rar

    7. **接口实现**:在某些情况下,可以使用接口来隐藏构造函数,从而实现只创建对象不调用构造函数。但是,接口不能包含实例构造函数,因此这种方法实际上涉及的是设计模式和具体实现策略的选择。 总结起来,C#提供...

    使用Android系统隐藏API

    以下是一个简单的示例,展示了如何使用隐藏API来解析一个APK文件并获取相关信息: ```java // 定义APK文件路径 String apkPath = "/sdcard/qq.apk"; // 创建PackageParser对象 PackageParser packageParser = new ...

    C#的New关键字的几种用法

    C#的New关键字的几种用法 C#语言中的New关键字是一个多...C#语言中的New关键字是一个非常有用的工具,它可以用于创建对象、隐藏基类成员和约束泛型参数的类型。了解New关键字的多种用法,将有助于你更好地编写C#代码。

    javascript工厂模式和构造函数模式创建对象方法解析.docx

    ### JavaScript工厂模式与构造函数模式创建对象方法解析 #### 一、工厂模式 在JavaScript中,工厂模式是一种常用的设计模式,用于封装创建对象的过程。它通过一个函数来创建具有相似特性的多个对象实例,这些对象...

    Java零基础-对象的创建和使用-内存分析.md

    ### Java零基础-对象的创建和使用-内存分析 #### 知识点一:对象的创建 在Java中,对象的创建是通过`new`关键字完成的。对象创建的两个主要步骤包括分配内存和初始化对象。 1. **分配内存**:当使用`new`关键字时...

    Java零基础-MyEclipse演示对象创建和使用.md

    1. **创建对象**:在`Main`类中,创建一个`Person`对象。 2. **设置属性值**:使用`setName`方法为`Person`对象的`name`属性设置一个具体值。 3. **调用方法**:调用`sayHello`方法展示对象的行为。 示例代码: ```...

    以COM对象方式显示或隐藏Excel的工具栏

    此外,如果你是在非VBA的环境中,比如C#或VB.NET,你同样可以使用.NET Framework中的 `Microsoft.Office.Interop.Excel` 命名空间来创建Excel COM对象并进行同样的操作: ```csharp using Microsoft.Office.Interop...

    面向对象技术课件-New

    在本课件"面向对象技术课件-New"中,我们可以深入探讨这一主题。 1. **面向对象的基本概念**:面向对象技术的核心思想包括类、对象、继承、封装和多态。类是对象的模板,定义了对象的属性和行为;对象是类的实例,...

    PHP程序设计-3期(KC016) 3.8.1创建和使用类课后习题:创建类和实例化对象.doc

    在创建和使用类时,我们首先定义类,然后通过实例化来创建类的个体实例。接下来,我们将深入探讨如何在PHP中创建类和实例化对象,以解答"创建矩形类Rectangle并实例化r1对象"的课后习题。 1. **创建类**: 在PHP中...

    JavaScript 使用面向对象的技术创建高级 Web 应用程序.doc

    我们使用`new`关键字来调用构造函数并创建一个新的对象实例。例如: ```javascript function Person(name) { this.name = name; } var person1 = new Person('Alice'); ``` 这里的`Person`就是构造函数,`person...

    使用Java实现面向对象编程

    我们通过调用类的构造方法来创建对象,并使用`new`关键字分配内存空间。 ```java Car myCar = new Car("Toyota", 2020); myCar.drive(); // 输出 "Driving the Toyota car made in 2020" ``` 在Java中,类还可以...

    JAVA上机实验类与对象new学习教案.pptx

    * 构造函数:构造函数是一种特殊的方法,它具有和它所在的类完全一样的名字,一旦定义好一个构造函数,创建对象时就会自动调用它。 * 类成员:类成员包括成员变量和成员方法,成员变量用于存储对象的状态,成员方法...

    java 子类对象赋值给父类对象的使用

    当我们创建一个子类对象并将其赋值给父类引用时,这种行为被称为向上转型(Upcasting)。这一过程是自动且安全的,因为子类对象包含了父类的所有属性和方法。下面我们将深入探讨这个主题,包括它的原理、示例代码...

Global site tag (gtag.js) - Google Analytics