00:00
Hello,大家好,那接下来几个小节呢,我们来封装一些与对象相关的API。那首先这个小节呢?我们来封装一个创建实例对象的一个函数,叫new instance。那么这个new instance的作用呢?就是根据构造函数来创建实例对象。呃,做这个的一个主要目标呢,在于模拟构造函数,创建实例,就像整个一个过程。那么首先我们点开这个编辑器来看一看。那么首先的话,我在这儿呢,先声明好一个构造函数。然后呢,在实例化对象的时候呢,我们并没有呢去用new的方式来去实例化对象,而是调了一下new instance这个函数,将构造函数传进来。然后把对应的参数也传进来,来实例化对象。那好,接下来的话呢,我们开始把这个new instance来做一个实现。参数这一块的话,咱们补一下啊,第一个呢是构造函数,后边的参数呢,是实例化所需要的一些参数,ARGS。
01:07
好,然后第一个是function。好,然后接着的话呢,我们来说一下呢。通过构造函数实例化对象,它的一个过程,首先第一步呢,它要创建一个新对象。然后第二步呢,是。修改。函数内部。啊,这个this。指向新对象。并执行。然后最后第三步呢,是返回这个新对象。啊,就是构造函数呢,在创建对象时的一个过程。那好,接下来的话呢,我们就开始呢,按照这个步骤,用自个儿的代码去实现一下。首先,我们先来造一个新对象。我们用自变量的方式来创建这个对象。然后下边呢,要执行这个函数,那这个函数怎么执行呢?咱们可以这样来执行fn.com。
02:04
而且呢,还要修改这个函数运行时的this指向啊,把这个this呢要指向到这个新对象当中,所以说我们可以这样子,哎,把O拿过来。顺便呢,咱们把参数也放进来啊,它在运行时所需要的参数呢,补到第二个参数当中来,我们呢,用一下这个扩展运算符,把它展开一下。好,这个时候呢,我们拿到一个结果,Count result等于。然后呢,接下来返回这个对象,返回哪个对象呢?返回这个新对象,然后呢,Return一下obj。OK,搞定,下面我们来看一看obj它的一个结果可不可以啊,右键我们打开浏览器。然后刷新,你可以看一下,然后name张三AGE18就来了。但是这个对象啊,它有一个小的问题啊,什么小问题呢,就是它的原型指向是不对劲的。啊,大家可以看一下这个圆形指向不对劲啊,所以咱们还要修改一下它的一个圆形指向,怎么来修改呢?哎,我们可以这样来做一下。
03:06
修改。这个先对象的圆形对象obj点下划线下划线pro下划线下划线它应该等于的是。构造函数这个对象的显示原型啊。来一个pro。这样的话,它的原型指向就没有问题了,好了,我们可以来看一看效果,刷新页面,然后大家可以看一下诶,Person。然后点开它这块的话,它显示就没有问题了。往下的一个类型显示。那这样的话呢,我们整个的一个创建就完成了啊,当然我们为了能够更加接近于用new实例化它的一个效果,我们还要对返回值做一个处理。在使用new实例化的时候呢,如果说这个构造函数内部呢,它返回的是一个对象。那么呢,New的返回结果就是这个对象啊,例如说。
04:02
大家看一下我这呢,直接return的一个空空return一个对象啊A等于100。然后呢,我在这儿呢的log打印一下new person。我呢就先不传不传参数了,我们来看看他的一个结果。然后切过来刷新页面,你可以看一下,它会返回的是这一个函数的执行结果。啊,如果说你返回的是一个,比方说返回的是一个数组。也是一样的。切过来刷新页面。啊,再比方说你返回的是一个什么呀,其他的函数。然后呢,切过来刷新一面,你可以看一下它呢,也是会返回这个函数的,那如果说是一个基本数类型,比方说你返回一个I love you是吧,来一个字符串。然后切过来刷新页面,如果说你返回的是一个非对象类型的这样一个基本数据类型值,那么这个你的返回结果就是那个新创建的对象。
05:01
所以说在这呢,我们内部的实现呢,我们也也应该呢,去做一个这样的判断啊,怎么来判断呢,就是判断返回结果它的类型。啊,如果说他要是一个对象类型的。那好,我就给你呢,返回这个结果。如果说呢,你要不是一个对象类型的,我就给你返回这个新对象。啊,这样的话呢,我们这个效果就跟new实例化对象它的效果保持一致了。好,我们来验证一下啊,首先这是一个基本的数据类型,然后我们切过来刷新一遍,这是这个新对象。然后再来啊,把上面这个打开,如果说我返回的是一个对象。切过来刷新可以看一下就会返回这一个新的啊,就是返回一下你返回的那个对象。好了,那么到这儿的话,关于创建对象这个函数方装我们就完成了。
我来说两句