JS中创建对象可以直接使用直接量的方式,这里讨论的是定义一个构造器(function)的情况。如下
function Person(name, age) {
this.name = name;
this.age = age;
}
var p = new Person('lily', 20);
发现某些库代码中创建正则对象的方式无需new,这让人感到奇怪。如下
var reg = RegExp('^he$');
测试发现使用或不使用new,最后返回的都是正则对象,且typeof它们都是“object”。
var reg1 = new RegExp('^he$');
var reg2 = RegExp('^he$');
reg1.test('he'); // true
reg2.test('he'); // true
console.log(typeof reg1); // object
console.log(typeof reg2); // object
嗯,挺好,代码运行正常。
如果这样的话干脆就不写new了,这么还节省了代码量。其它类型也是这样吗?试试String/Number/Boolean。
var str1 = new String(1);
var str2 = String(1);
var num1 = new Number('1');
var num2 = Number('1');
var boo1 = new Boolean(1);
var boo2 = Boolean(1);
console.log(typeof str1); // object
console.log(typeof str2); // string
console.log(typeof num1); // object
console.log(typeof num2); // number
console.log(typeof boo1); // object
console.log(typeof boo2); // boolean
可以看到,与正则的情况不同。正则无论是否new,typeof后都是object。
但String/Number/Boolean类型,new的对象typeof返回是“object”,不new的typeof返回则是“string”。
即不适用new的情况可以将其它类型分别转化成字符串,数字和布尔类型。
好了,再回到篇头的那个Person类。即我们自己写的类可以不用new操作符生成对象吗?
function Person(name, age) {
this.name = name;
this.age = age;
}
var p = Person('lily', 20);
console.log(p); // undefined
返回undefined,很明显不行。因此想不用new的情况去创建Person实例是异想天开的。
如果非要实现呢?其实也行,如下
function Person(name, age) {
this.name = name;
this.age = age;
if (this===window) {
return new Person(name, age);
}
}
var p = Person('lily', 20); // object
稍微改造了下Person类。实际上内部区分了下Person是作为构造器还是函数执行。
相关:
使用隐藏的new来创建对象
JavaScript中判断函数是new还是()调用
分享到:
相关推荐
然而,在一些特定的场景下,创建对象时可以不使用new操作符,这一点在某些库代码或者特定的内置对象构造器中可以观察到。通过分析这些情况,我们可以对JavaScript中构造器函数的使用有更深刻的理解。 首先,需要...
创建对象通常有两种方式:使用`new`关键字和构造函数,例如`var o = new Object();`,或者使用对象字面量语法,如`var o = {};`。 当不再需要一个对象时,可以通过将它的引用设置为`null`来“废除”或解除对象,...
- 构造函数方式:定义一个函数作为构造器,使用new关键字创建实例。 ```javascript function Person(name, age) { this.name = name; this.age = age; } var john = new Person('John', 30); ``` - 原型链方式:...
2. **构造函数**:使用函数作为构造器,通过`new`关键字创建对象实例。构造函数通常使用首字母大写的命名约定,以区分于普通函数。 ```javascript function Person(name, age) { this.name = name; this.age = ...
构造器模式类似于面向对象编程中的构造函数,用于初始化新创建对象的状态。在JavaScript中,构造函数是用来创建特定类型对象的函数,通过`new`关键字调用。不过,构造器模式并不局限于JavaScript,其他语言如...
在JavaScript中,通常通过闭包或构造函数结合私有化构造函数的方式实现。例如,使用闭包: ```javascript const Singleton = (function() { let instance; function createInstance() { return { singletonValue...
现在,所有通过`Car`构造器创建的实例都可以共享`toString`方法,而不会为每个实例创建新的副本。 此外,JavaScript提供了多种创建和操作对象的方式。例如,可以使用对象字面量创建空对象,或者使用`Object.create`...
此外,JavaScript 1.5引入了构造函数和`new`操作符,进一步增强了面向对象的编程体验,允许开发者定义自己的类并创建实例。 在构建高级Web应用程序时,面向对象技术能够帮助组织代码,提高代码复用性和可维护性。...
面向对象编程通常依赖于类来创建对象实例,但在JavaScript中,我们可以通过函数来模拟类的行为。函数作为构造函数时,可以使用new关键字创建新对象,同时函数内部的this关键字会指向新创建的对象。通过原型链,对象...
1. 构造函数与new操作符:构造函数用于创建特定类型的对象,new操作符则是调用构造函数的手段。 2. prototype与__proto__:两者都与原型链有关,prototype是构造函数的属性,__proto__是实例对象的属性,它们连接了...
2. **工厂模式**:创建对象时,不直接使用new关键字,而是通过一个工厂函数或类来创建。这增加了代码的灵活性,可以更方便地替换或扩展对象类型。 3. **构造函数模式**:JavaScript中,构造函数用于创建具有相似...
在JavaScript中,创建对象的方式有多种。可以使用`new Object()`或直接使用对象字面量语法,如`{}`。在对象字面量内,可以立即定义属性,例如: ```javascript var userObject = { lastLoginTime: new Date() }; `...
3. **直接支持 JavaScript 对象:** JSON 与 JavaScript 对象非常相似,可以直接在 JavaScript 中使用。 ##### JSON 与 XML 的比较 1. **效率:** JSON 比 XML 更节省带宽,因为 JSON 的数据结构更加紧凑。 2. **...
2. **工厂模式**:提供一个接口来创建对象,而无需指定具体类。JavaScript的`new`操作符就是一种简单的工厂模式实现,但也可以通过函数或对象字面量创建更复杂的工厂。 3. **构造函数模式**:JavaScript的类是通过...
10. **构造器和类**:JavaScript中的构造器是通过函数来创建类实例的,可以通过`new`关键字实例化。构造函数可以有或没有参数,类不一定是构造器,但构造器是类的一种形式。 11. **对象和属性**:可以使用点表示法...
- 构造函数方式:定义一个函数作为构造函数,通过`new`关键字创建对象,构造函数可以接收参数并创建私有和公共成员。 7. **对象属性和方法的定义** - **私有属性**:在构造函数内部定义,外部无法直接访问。 - *...
这段代码表明,通过`jQuery`函数创建的对象实际上是通过`new jQuery.fn.init`来构造的。这意味着,每次调用`jQuery`时,实际上是在构造一个新的`jQuery.fn.init`实例。这为jQuery对象提供了一种统一的构造方式,并且...
5. **面向对象**:JavaScript通过构造函数和`new`操作符实现面向对象编程。对象可以通过字面量语法创建,也可以通过构造函数实例化。`this`关键字在函数或方法中引用当前对象,使得方法可以与特定对象关联。 6. **...