2016-01-17 13 views

Trả lời

12

Hãy so sánh obj1obj2 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 obj1obj2 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 } 
Các vấn đề liên quan