Escritura a mano nueva e instancia de

Escritura a mano nueva e instancia de

Nuevo

El nuevo operador crea una instancia de un tipo de objeto definido por el usuario o una instancia de un objeto integrado con un constructor

Uso de nuevo

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"

Escritura a mano Nuevo

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)

en vez de

instanceof se usa para detectar si la propiedad de prototipo del constructor aparece en la cadena de prototipos de un objeto de instancia

Uso de instancia de

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

Instancia manuscrita 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

Supongo que te gusta

Origin blog.csdn.net/rraxx/article/details/115014646
Recomendado
Clasificación