在javascript中,创建新对象的三种常用方法如下:

// 对象字面量
{};

// object构造器的简洁记法
new Object();

// 创建一个空的对象
Object.create();

对象字面量


// 对象字面值是封闭在花括号对({})中的一个对象的零个或多个"属性名-值"对的(元素)列表。
var test1 = {
    name: '前端柒号'
    site: 'www.qianduan7.com'
};

// 根据上面的对象我们做下测试
test1 instanceof Object; // true
test1.__proto__ === Object.prototype  // true,指向创建它构造函数的原型对象。

// 在ES2015,对象字面值扩展支持在创建时设置原型
var test1 = {
    __proto__: protoObj
    name: '前端柒号'
    site: 'www.qianduan7.com'
};

new Object()


var test2 = new Object();
test2.__proto__ === Object.prototype  // true,指向创建它构造函数的原型对象。

所以:
var obj = {} 等价于 var obj = new Object()

注意:

  • 传入string,返回String对象
  • 传入Number,返回Number对象
var num = new Object(7);
num.__proto__ === Object.prototype;  // false
num.__proto__ === Number.prototype;  // true

此时指向它构造函数原型对象不是Object.prototype;

Object.create();


为了解决"构造函数法"的缺点,更方便地生成对象,Javascript的国际标准ECMAScript第五版(目前通行的是第三版),提出了一个新的方法Object.create()。
用这个方法,"类"就是一个对象,不是函数。这种方法比"构造函数法"简单,但是不能实现私有属性和私有方法,如果在Constructor函数中有一些初始化代码,Object.create不能执行那些代码。

function Constructor(){}
var test3 = new Constructor();
// 上面的一句就相当于:
var test3 = Object.create(Constructor.prototype);

// 创建一个原型为null的空对象
var test4 = Object.create(null);
test4.__proto__;    // undefined

var test5 = {};
// 以字面量方式创建的空对象就相当于:
var test5 = Object.create(Object.prototype);
版权声明:本文为博主原创文章,转载请添加原文地址
暂无评论