自调函数与继承

72 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

  • 给自调用函数后加分号:自调用函数的写法(function (){})();如果引用多个自调用函数,须在每个自调用函数结束前加分号

  • 如果函数作为事件或者函数表达式,在后面写的自调用函数也要注意在事件或函数表达式后添加分号

  • 使用自调用函数时,需要用window.tools = tools来暴露tools构造函数,需要写在第一个小括号结束前。由于这样window在找不到自身作用域的指定内容时,会去全局作用域查找。所以可以在function后的小括号和第二个小括号中均传入window,undefined,第一个为形参,第二个为实参,就不会跳到全局作用域查找了

  • 一般在写完js代码后,为加快运行速度,会将js代码进行压缩。即单独创建一个index.min.js文件放入压缩后的js代码。压缩网址:tool.oschina.net/jscompress?type=3

  • 面向对象的特点:封装、继承、多态

  • 继承:

    • 对象拷贝:for in:父对象的属性拷贝给子对象,如果子对象有属性不想被父对象替换,可以使用if(child[k])continue语句实现

    • 原型继承:利用原型对象进行继承,比如存在两个构造函数,Person(name,age,sex)和Student(score),Student需要使用Person的内容,可以给Student的原型对象创建一个Person实例:Student.prototype = new Person(“张三”,18,“男”),然后再创建一个Student实例即可:var stu = new Student(89)

    • 问题:Student的prototype中的constructor属性被更改为Person,需要改回来:Student.prototype.constructor = “Student”。而且在创建另一个Student实例对象时,前三项内容会一致

    • 构造函数属性继承:在Student函数内部直接对Person进行调用执行,由于Person在调用过程中内部的this指向的是Person,所以要通过call方法将Person内部的this改为Student中的this,这样就可以在Student内部也生成了相应的一些属性 image.png

    • 构造函数的原型方法继承_对象拷贝继承:子类型的原型对象上,需要继承父类型的原型对象的方法 image.png 构造函数的原型方法继承_原型继承:Student.prototype = new Person();Student.prototype.constructor = Student

    • 组合继承:属性在构造函数内部继承,方法通过原型继承 image.png