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