前端JavaScript必备知识点三

1:new的原理

new运算符是用来实例化一个类,从而在内存中分配一个实例对象。

如果函数或者方法调用前带有关键字new, 则构成构造函数调用.构造函数调用会创建一个新的空对象,该对象继承自构造函数的prototype属性。构造函数试图初始化这个新创建的对象,并将这个对象用作其上下文。 

任何函数只要使用 new 操作符调用就是构造函数,而不使用 new 操作符调用的函数就是普通函数。

// 自定义构造函数
function Person(name, age, gender) {
  this.name = name;
  this.age = age;
  this.gender = gender;
  this.sayName = function () {
    console.log(this.name);
  }
}

var person1 = new Person('zhangsan', 29, 'male');
var person2 = new Person('lisi', 19, 'female');

person1.sayName(); // zhangsan
person2.sayName(); // lisi

 要创建 Person 的实例,应使用 new 操作符。以这种方式调用构造函数会执行如下操作。

(1) 在内存中创建一个新对象。

(2) 这个新对象内部的[[Prototype]] 特性被赋值为构造函数的 prototype 属性。

(3) 构造函数内部的 this 被赋值为这个新对象(即 this 指向新对象)。

(4) 执行构造函数内部的代码(给新对象添加属性)。

(5) 如果构造函数返回非空对象,则返回该对象;否则,返回刚创建的新对象。 

new工作的原理是

当new一个函数的时候,会创建一个新的实例,然后将得到原函数的原型。 

2:如何正确判断this?该博客有this的具体使用

 this   指向问题   一般情况下·this   的最终指向的是那个调用它的对象

JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。

  • 在方法中,this 表示该方法所属的对象。

  • 如果单独使用,this 表示全局对象。

  • 在函数中,this 表示全局对象。

  • 在事件中,this 表示接收事件的元素。

  • 在显式函数绑定时,我们可以自己决定this的指向

  //1:  全局作用域·或者普通作用域中this指向的是全局对象 window
        console.log(this);

        function fn() {
            console.log(this);
        }
        fn();
 //  2 方法调用中谁调用this 就指向谁
        var o = {
            sayHi: function () {
                console.log(this);
            }
        }
        o.sayHi();
  //  3:构造函数中this构造函数的实例
        function Fun() {
            console.log(this); //this指向的是fun  实例对象
        }
        var fun = new Fun();

 显示绑定:函数通过call()、apply()调用,bind()方法绑定,this指向的就是指定的对象;

 在下面实例中,当我们使用 person2 作为参数来调用 person1.fullName 方法时, this 将指向 person2, 即便它是 person1 的方法:

var person1 = {
  fullName: function () {
    return this.firstName + " " + this.lastName;
  }
}
var person2 = {
  firstName: "Zach",
  lastName: "Muyi",
}
var name = person1.fullName.call(person2);  // 返回 "Zach Muyi"
console.log(name);

3:闭包及其作用

变量作用域以及闭包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值