You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
functionAnimal(name){this.name=name;}Animal.prototype.sayName=function(){console.log('It is '+this.name);}varanimal0=newAnimal("dog");animal0.sayName;console.log(animal0.name);// dog
可以得出以下结论
new 通过构造函数创建出来的实例可以访问到构造函数中的属性
new 通过构造函数创建出来的实例可以访问到构造函数原型链中的属性
实现
首先我们再来回顾下 new 操作符的几个作用
new 操作符会返回一个对象,所以我们需要在内部创建一个对象
这个对象,也就是构造函数中的 this,可以访问到挂载在 this 上的任意属性
这个对象可以访问到构造函数原型上的属性,所以需要将对象与构造函数链接起来
返回原始值需要忽略,返回对象需要正常处理
回顾了这些作用,我们就可以着手来实现功能了
function_new(func){varres={};if(func.prototype!==null){res.prototype=func.prototype;}varret=func.apply(res,Array.prototype.slice.call(arguments,1));if((typeofret==="object"||typeofret==="function")&&ret!==null){returnret;}returnres;}functionAnimal(name){this.name=name;}varobj=_new(Animal,'cat');// 相当于var obj = new Animal('cat')console.log(obj.name);// cat
The text was updated successfully, but these errors were encountered:
手写一个new操作符
使用
首先通过例子,看下new的使用
可以得出以下结论
实现
首先我们再来回顾下
new
操作符的几个作用new
操作符会返回一个对象,所以我们需要在内部创建一个对象this
,可以访问到挂载在this
上的任意属性回顾了这些作用,我们就可以着手来实现功能了
The text was updated successfully, but these errors were encountered: