一、Object.create()創建對象
詳情鏈接:點擊
'use strict';
/*
1. Object.create(prototype, [descriptors])
* 作用: 以指定對象爲原型創建新的對象
* 爲新的對象指定新的屬性, 並對屬性進行描述
value : 指定值
writable : 標識當前屬性值是否是可修改的, 默認爲 false
*/
var obj1 = {
name: 'muzidigbig',
age: 23
};
var obj2 = Object.create(obj1, {
sex:{
value:'男',
writable:true,
}
});
console.log(obj2);
二、Object.defineProperties()創建對象
詳情鏈接:點擊
/*
2. Object.defineProperties(object, descriptors)
* 作用: 爲指定對象定義擴展多個屬性
* get :用來獲取當前屬性值得回調函數
* set :修改當前屬性值得觸發的回調函數,並且實參即爲修改後的值
* 存取器屬性:setter,getter一個用來存值,一個用來取值
*/
var obj3 = {};
Object.defineProperties(obj3, {
fullName: {
get: function () { //當你獲取當前擴展屬性值的時候,返回的就是當前屬性的值
return this.firstName + ' ' + this.lastName;
},
set: function (msg) { //監視當前屬性值,當屬性值發生改變的時候自動調用。
var names = msg.split(' ');
this.firstName = names[0];
this.lastName = names[1];
}
}
});
obj3.fullName = "muzidigbig Lee";
console.log(obj3);
console.log(obj3.fullName);
這兩種方式沒有什麼區別,只是用了底層的方式來實現。
/*
2等同於下面擴展對象的方式
*/
var obj4 = {
username: 'honghong',
age:24,
get usernameAge() {
return this.username + " " + this.age;
},
set usernameAge(msg) {
var names = msg.split(' ');
this.username = names[0];
this.age = names[1];
}
};
obj4.usernameAge = "guanyu 22"
console.log(obj4);
console.log(obj4.username);
總結:
Object.create()是繼承於某個對象創建的新對象,Object.defineProperties()是對對象屬性的擴展。