Hãy so sánh obj1
và obj2
trong mã này:
var target1 = {}, target2 = {};
var obj1 = Object.create(target1, {myProp: {value: 1}});
var obj2 = Object.assign(target2, {myProp: 1});
nguyên mẫu chuỗi
Object.create
tạo ra một đối tượng mới với các quy định [[Prototype]], và Object.assign
gán các thuộc tính trực tiếp trên đối tượng được chỉ định:
obj1 !== target1;
obj2 === target2;
Các chuỗi nguyên mẫu của obj1
và obj2
trông giống như
obj1 --> target1 --> Object.prototype --> null
obj2 --------------> Object.prototype --> null
Thuộc tính
Object.create
định nghĩa các thuộc tính và Object.assign
chỉ gán cho họ.
Khi tạo thuộc tính, nhiệm vụ sẽ tạo thuộc tính đó là có thể định cấu hình, có thể ghi và đếm được. Khi xác định một thuộc tính, bạn có thể chỉ định các cờ đó, nhưng theo mặc định nó không thể định cấu hình, cũng không thể ghi và không đếm được.
Object.getOwnPropertyDescriptor(obj1, 'myProp');
// { value: 1, writable: false, enumerable: false, configurable: false }
Object.getOwnPropertyDescriptor(obj2, 'myProp');
// { value: 1, writable: true, enumerable: true, configurable: true }