Promise学习3:手写Promise的前序知识以及简单实现

JS立即执行函数与模块化

立即执行函数

函数定义好之后立马执行

**函数表达式的方式:**函数表达式后面加()即可立即执行函数

var xmlhttpUtil = function () {
    function getText(url,callback){
        alert("dog");
}();

匿名函数形式的立即执行函数

匿名函数不允许作为单独的语句直接出现于javascript中,因此要想立即执行函数,必须做出一些符合语法的改变:

方法1 是将匿名函数赋值给一个变量,这就成了函数表达式,可在其后加括号立即执行。
方法2 匿名函数外面套一个括号(这是js语法允许的),这就相当于成了函数表达式,然后再在其后加括号即可立即执行。

(function(b){
            alert(b);
        })(321);

模块化

由于函数内部的变量不会污染全局作用域,因此立即执行函数可用于模块化,很多第三方库都采用了这种方式。

模块化进化史

  1. 定义全局函数:会导致变量被污染,引起变量名冲突;
  2. namespace(简单对象封装)模式 :将函数方法直接放到对象中,减少了全局变量,但是这种情况下数据不是私有的,仍然可以外部进行修改;
  3. IIFE模式(匿名函数自调用):数据是私有的, 外部只能通过暴露的方法操作,但是如果当前模块依赖另一个模块怎么办
  4. commonjs

简单复习一下原型

构造对象

通俗的话来说,就是在script标签中声明的那个函数

<body>
<script>
    function students() {
 
        /* 我就是构造函数 */
 
 
    }
 
 
 
</script>
</body>

原型对象

在声明了一个函数之后,浏览器会自动按照一定的规则创建一个对象,这个对象就叫做原型对象,这个原型对象其实是存储在内存中的。

在声明了一个函数之后,这个构造函数(声明了的函数)中有一个属性prototype,这个属性指向的就是这个构造函数对应的原型对象;这个原型对象中有一个属性constructor,这个属性指向的就是这个构造函数(声明了的函数)。

当我们使用构造函数去创建对象时

<body>
<script>
    function students() {
 
        /* 我就是构造函数 */
 
 
    }
 
    var stu = new students();
 
</script>
 
</body>

此时,stu就是构造函数students创建出来的对象,这个对象中时没有prototype属性的,prototype属性只有在students中有;

但是stu有一个__proto__属性,stu调用这个属性就可以直接访问到students的原型对象;

总结:

  1. prototype属性:
    prototype存在于构造函数中,指向这个构造函数的原型对象
  2. constructor属性
    constructor属性存在于原型对象中,她指向了构造函数
    我们根据需要,可以students.prototype 属性指定新的对象,来作为students的原型对象。但是这个时候有个问题,新的对象的constructor属性则不再指向students构造函数了。
  3. proto 属性(注意:左右各是2个下划线):
    用构造方法创建一个新的对象之后,这个对象中默认会有一个属性__proto__, 这个属性就指向了构造方法的原型对象。

this指向问题

this:表示当前对象的一个引用。

this的指向:this不是固定不变的,是根据调用的上下文(执行时环境)改变而改变。

  • 如果单独使用,this 表示全局对象。
  • 在方法中,this 表示该方法所属的对象。
  • 在函数中,this 表示全局对象,构造函数中,this表示构造函数的实例对象
  • 在函数中,在严格模式下,this 是未定义的(undefined)。
  • 在事件中,this 表示接收事件的元素。

自定义(手写)Promise

promise手写

https://juejin.cn/post/6978371488789299230

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李喵喵爱豆豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值