首先来看一个案列 这一过程实际是:在 手动实现 总结:
手动实现一个new
function Dog (name,age){ this.name = name; this.age = age; this.say = function () { console.log("I am " + this.name) } } var dog = new Dog('旺财',4) console.log(dog) // Dog {name: "旺财", age: 4, say:f }
new
的时候,实际是去调用了构造函数Dog
里面的constructor
构造器,最后返回一个新的对象,这个new
出来的实例继承了构造函数的属性和方法,这一过程手动实现大致可以分为以下几步
__proto__
指向构造函数的原型对象prototype
this
到obj
(指向新生成的实例对象) ,并传递参数 function self_New () { // 创建一个新对象:两种方式都可以 // var obj = {} var obj = new Object(); // 获得构造函数 [ Con, ...arg ] = arguments // 链接到原型(给obj这个新生对象的原型指向它的构造函数的原型,使其可以获取到构造函数上的属性和方法) obj.__proto__ = Con.prototype; // 绑定this到obj,并传递参数(call形式) var result = Con.call(obj,...arg); // 绑定this到obj,并传递参数(apply形式) // var result = Con.apply(obj,[...arg]); // 确保new出来的是一个对象 return typeof result === "object" ? result : obj } // 使用 var dog2 = self_New (Dog,'旺财',4); console.log('dog2',dog2) // dog2: {name: "旺财", age: 4, say:f }
new Object()
的方式创建对象需要通过作用域链一层层找到 Object
,但是你使用字面量的方式就没这个问题
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算