Écriture manuscrite Nouveau et instanceof
Nouveau
L'opérateur new crée une instance d'un type d'objet défini par l'utilisateur ou une instance d'un objet intégré avec un constructeur
Utilisation de nouveau
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
const car1 = new Car('Eagle', 'Talon TSi', 1993);
console.log(car1.make);
// expected output: "Eagle"
Écriture manuscrite Nouveau
function myNew(Fn,...args) {
let obj = {
}
let result = Fn.call(obj,...args)
//如果Fn构造函数返回的值是一个对象,myNew就返回这个对象
if(result instanceof Object) return result
obj.__proto__ = Fn.prototype
return obj
}
function Person(name,age) {
this.name = name
this.age = age
// return {m:1,n:2}
}
let w = myNew(Person,'jiang',10)
console.log(w)
exemple de
instanceof est utilisé pour détecter si la propriété prototype du constructeur apparaît sur la chaîne prototype d'un objet instance
Utilisation d'instanceof
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
const auto = new Car('Honda', 'Accord', 1998);
console.log(auto instanceof Car);
// expected output: true
console.log(auto instanceof Object);
// expected output: tru
Instance manuscrite de
function Person(name,age) {
this.name = name
this.age = age
}
function myInstanceOf(obj,Type){
//temp等于obj的原型对象
let temp = obj.__proto__
//因为Object.prototype.__proto__的原型对象为null
while(temp){
if(temp === Type.prototype){
return true
}
//顺着原型链去更改temp的值
temp = temp.__proto__
}
return false
}
let p = new Person()
console.log(myInstanceOf(p,Person))//true
console.log(myInstanceOf(p,Object))//true
console.log(myInstanceOf(p,Function))//false