WEB前端问题总结--JavaScript(2)

一.闭包

   函数的嵌套定义, 定义在内部的函数就称之为 闭包
 1.一个函数要使用另一个函数的局部变量
 2.闭包会持久化包裹自身的函数的局部变量
 3.解决循环绑定

function outer() {
    var num = 10;
    function inner() {  // 闭包
        // 1.在inner函数中,使用了outer的局部变量num
        return num;
    }
    return inner;
}
var innerFn = outer();
// 2.借助闭包,将局部变量num的生命周期提升了
var num = innerFn();
console.log(num);

二.变量提升

   1.在变量声明之前 去使用变量 会得到 undefined ,而不是报错.

   2.函数内,如果声明了跟全局变量同名的局部变量, 在声明之前使用该变量,得到undefined( 该变量已经是局部的啦)

三.JS原型和原型链

   参考链接:https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014344997013405abfb7f0e1904a04ba6898a384b1e925000

1.原型

  每个对象 都有原型 (原型仍然是一个对象)

  对象可以继承原型的属性和方法

 __proto__ 所有对象都有该属性, 该属性指向该对象的原型

2.原型链

   原型作为对象 也有原型

   原型的原型的原型 就构成了 原型链

  使用对象中某个属性的时候,先从对象中找,如果没有,从原型上找,原型如果也没有,继续向上找,知道顶层 (顶层的原型对象是一个 类型(类)(构造     函数)是Object 的对象)

四.面向对象js

    1.json方式定义对象 

var obj = {
    // 属性
    name: 'Zero',
    // 方法
    teach: function () {
        console.log("教学");
    }
};
obj.name | obj.teach()

    2.构造函数

function Person(name) {  // 类似于python中的类一样来使用
   	// this代表Person构造函数实例化出的所有具体对象中的某一个
    this.name = name;  
    this.teach = function () {
        console.log(this.name + "正在教学");
    }
}
// ①通过构造函数实例化出具体对象
// ②通过对象.语法调用属性与方法
var p1 = new Person("张三"); 
p1.name  // 张三, this指向p1对象
var p2 = new Person("李四"); 
p2.teach  // 李四正在教学, this指向p2对象

// 3.ES6类语法
class Student {
    // 需要构造器(构造函数)来完成对象的声明与初始化
    constructor (name) {
        // 属性在构造器中声明并完成初始化
        this.name = name;
    }
    // 类中规定普通方法
    study () {
        console.log(this.name + "正在学习");
    }
    // 类方法
    static fn() {
        console.log("我是类方法")
    }
}
// 类中的普通方法由类的具体实例化对象来调用
// 类中的类方法由类直接来调用(这类型的方法大多是功能性方法,不需要对象的存在)

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值