function F(name) {
this.name = name;
}
ownPropertyFlags(F);
// F (function)
// ---------------------------------------
// property w e c value
// ---------------------------------------
// ๐ธlength . . v 1
// ๐ธname . . v F
// ๐ธarguments . . . null
// ๐ธcaller . . . null
// ๐ธprototype v . . [object Object]
// ---------------------------------------
// w: writable, e: enumerable, c: configurable
// โญ ๆณจๆ๏ผ `F.prototype` ๆฏ writable (ๅฏไปฅ่ขซๆๆ)โ
// โญ every function has a default prototype
ownPropertyFlags(F.prototype, {
showFooter: false,
objectName: 'F.prototype'
});
// F.prototype (object)
// --------------------------------------
// property w e c value
// --------------------------------------
// ๐ธconstructor v . v F (function)
// --------------------------------------
class A {}
ownPropertyFlags(A, {showFooter: false});
// A (class)
// ---------------------------------------
// property w e c value
// ---------------------------------------
// ๐ธlength . . v 0
// ๐ธname . . v A
// ๐ธprototype . . . [object Object]
// ---------------------------------------
// โญ ๆณจๆ๏ผ`A.prototype` ็ writable == falseโ(ไธ่ฝ่ขซๆๆโ)
ownPropertyFlags(A.prototype, {
showFooter: false,
objectName: 'A.prototype',
});
// A.prototype (object)
// -----------------------------------
// property w e c value
// -----------------------------------
// ๐ธconstructor v . v A (class)
// -----------------------------------