📜  JavaScript | Reflect.setPrototypeOf() 方法

📅  最后修改于: 2022-05-13 01:56:48.171000             🧑  作者: Mango

JavaScript | Reflect.setPrototypeOf() 方法

JavaScript 中的Reflect.setPrototypeOf()方法用于将指定对象的原型设置为另一个对象或 Null。此方法返回成功操作的布尔值。
句法:

Reflect.setPrototypeOf(obj, prototype)

参数:

  • Obj:此参数保存目标对象,用于设置原型。
  • Prototype:此参数保存对象的新原型。它可以是任何对象或只是一个空值。

返回值:该方法总是返回一个布尔值,表示设置原型是否成功。
异常:当目标不是对象时,TypeError 是作为结果给出的异常。
下面的示例说明了 JavaScript 中的 Reflect.setPrototypeOf() 方法:
示例 1:

javascript
const object1 = {};
 
console.log(Reflect.setPrototypeOf(object1, Object.prototype));
console.log(Reflect.setPrototypeOf(object1, null));
 
const object2 = {};
console.log(Reflect.setPrototypeOf(Object.freeze(object2), null));
 
let object3 = { 
  gfg() { 
    return 'value'; 
  } 
} 
let obj = { 
  geeks() { 
    return 'answer'; 
  } 
} 
Object.setPrototypeOf(obj, object3); 
console.dir(obj);  
console.log(obj.geeks());   
console.log(obj.gfg());


javascript
console.log(Reflect.setPrototypeOf({}, Object.prototype) );
  
// It can change an object's [[Prototype]] to null.
console.log(Reflect.setPrototypeOf({}, null));
  
// Returns false if target is not extensible.
console.log(Reflect.setPrototypeOf(Object.freeze({}), null)); 
  
// Returns false if it cause a prototype chain cycle.
let target = {}
let proto = Object.create(target)
console.log(Reflect.setPrototypeOf(target, proto) ); 
  
var object3 = { 
   gfg() { 
     console.log(this.name + ' have fun.'); 
   } 
}; 
class objt { 
   constructor(name) { 
   this.name = name; 
  } 
} 
Reflect.setPrototypeOf(objt.prototype, object3); 
 
// If you do not do this you will get
// a TypeError when you invoke speak 
var val = new objt('Geeks'); 
val.gfg();


输出:

true
true
false
"answer"
"value"

示例 2:

javascript

console.log(Reflect.setPrototypeOf({}, Object.prototype) );
  
// It can change an object's [[Prototype]] to null.
console.log(Reflect.setPrototypeOf({}, null));
  
// Returns false if target is not extensible.
console.log(Reflect.setPrototypeOf(Object.freeze({}), null)); 
  
// Returns false if it cause a prototype chain cycle.
let target = {}
let proto = Object.create(target)
console.log(Reflect.setPrototypeOf(target, proto) ); 
  
var object3 = { 
   gfg() { 
     console.log(this.name + ' have fun.'); 
   } 
}; 
class objt { 
   constructor(name) { 
   this.name = name; 
  } 
} 
Reflect.setPrototypeOf(objt.prototype, object3); 
 
// If you do not do this you will get
// a TypeError when you invoke speak 
var val = new objt('Geeks'); 
val.gfg();

输出:

true
true
false
false
"Geeks have fun."

支持的浏览器: JavaScript Reflect.setPrototypeOf() 方法支持的浏览器如下:

  • 谷歌浏览器 49 及更高版本
  • 边缘 12 及以上
  • 火狐 42 及以上
  • Opera 36 及以上
  • Safari 10 及更高版本