unable to get or set the properties of prototype

49 Views Asked by At

I am getting error when trying to get the keys of the object and all the objects of prototype objects, if present. It gives me an type error when trying to access keys of prototype. Whats wrong This works -

Object.keys(object)

Object.keys(Object.getOwnPropertyDescriptors(object.__proto__)),

let obj = { "tester": 10 };
let ko = Reflect.ownKeys(obj);
let kp = Reflect.ownKeys(obj.prototype); // Error TypeError: Reflect.ownKeys called on non-object
let kp = Reflect.ownKeys(obj.__proto__); // Error TypeError: Reflect.ownKeys called on non-object
Object.setPrototypeOf(obj.prototype, null); // Error 
Object.freeze(obj.prototype); // Error
Object.freeze(obj);


let obj = { "tester": 10 };

let ko = Reflect.ownKeys(obj);
let kp = Reflect.ownKeys(obj.prototype); // Error TypeError: Reflect.ownKeys called on non-object

let oko = Object.keys(obj.__proto__); // Error TypeError: Reflect.ownKeys called on non-object
let okp = Object.keys(obj.prototype); // Error TypeError: Reflect.ownKeys called on non-object

let doko = Object.keys(Object.getOwnPropertyDescriptors(obj.__proto__)); 
let dokp = Object.keys(Object.getOwnPropertyDescriptors(obj.prototype)); // Error TypeError: Cannot convert undefined or null to object

Object.setPrototypeOf(obj.prototype, null); // TypeError: Object.setPrototypeOf called on null or undefined 
Object.freeze(obj.prototype); // TypeError: Object.setPrototypeOf called on null or undefined
Object.freeze(obj);

Error is TypeError: Reflect.ownKeys called on non-object

TypeError: Reflect.ownKeys called on non-object
    at Reflect.ownKeys (<anonymous>)
    at copyProps (C:\Users\ganes\OneDrive\Documents\projects\freezeobject\index.js:68:29)
    at Object.makeSafe (C:\Users\ganes\OneDrive\Documents\projects\freezeobject\index.js:139:3)
    at Object.<anonymous> (C:\Users\ganes\OneDrive\Documents\projects\freezeobject\demos\demos.freezeobject.js:25:20)
    at Module._compile (node:internal/modules/cjs/loader:1378:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1437:10)
    at Module.load (node:internal/modules/cjs/loader:1212:32)
    at Module._load (node:internal/modules/cjs/loader:1028:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:142:12)
    at node:internal/main/run_main_module:28:49
1

There are 1 best solutions below

0
Alexander Nenashev On

Use Object.getPrototypeOf() to access an object's prototype:

let obj = { "tester": 10 };
console.log(Reflect.ownKeys(Object.getPrototypeOf(obj)));

__proto__ should work too but depricated:

let obj = { "tester": 10 };
console.log(Reflect.ownKeys(obj.__proto__));

prototype is a property of a function/class to assign as __proto__ to this with the function/class used as a constructor with new

console.log((function(){}).prototype);
console.log((class{}).prototype);
console.log(({}).prototype);

And yes, you cannot freeze or set a prototype of undefined:

Object.setPrototypeOf(obj.prototype, null); // Error 
Object.freeze(obj.prototype); // Error

And yes, .prototype !== __proto__:

class Test{}
console.log(Test.__proto__);
console.log(Test.prototype === Test.__proto__);