在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);
版权声明:本文为博主原创文章,转载请添加原文地址 https://www.qianduan7.com/javascript/create-object-difference.html