鍍金池/ 問答/HTML/ JavaScript defineProperty與直接定義對(duì)象屬性的區(qū)別?

JavaScript defineProperty與直接定義對(duì)象屬性的區(qū)別?

let obj = {
    "info": msg => alert(msg)
}

let obj2 = {
  ["info"]: msg => alert(msg)
}

console.log(obj, obj2);

上面一段代碼,通過Babel翻譯過后為

"use strict";

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

var obj = {
  "info": function info(msg) {
    return alert(msg);
  }
};

var obj2 = _defineProperty({}, "info", function info(msg) {
  return alert(msg);
});

console.log(obj, obj2);

最后生成的obj和obj2看上去對(duì)象結(jié)構(gòu)是一致的,咨詢一下各位大神這兩者有什么區(qū)別么

回答
編輯回答
筱饞貓

因?yàn)橛刑厥庖饬x:

該方法允許精確添加或修改對(duì)象的屬性。通過賦值來添加的普通屬性會(huì)創(chuàng)建在屬性枚舉期間顯示的屬性(for...in 或 Object.keys 方法), 這些值可以被改變,也可以被刪除。這種方法允許這些額外的細(xì)節(jié)從默認(rèn)值改變。默認(rèn)情況下,使用Object.defineProperty()添加的屬性值是不可變的。

來自 Object.defineProperty() - JavaScript | MDN

2018年5月14日 02:48