浅谈面向对象和继承

1.面向对象和面向过程的区别

  面向过程:注重代码的过程

  面向对象:注重代码的结果

2.面向对象三大特性

  抽象   封装  继承  多态(JS不存在多态)

3.什么是一个构造函数

  new 一个关键字函数  创建一个对象,该对象的的属性this指向window 函数里面指向这个对象

  构造函数和普通函数的区别 :

    1、前者的this的指向是实例化后的对象 后者的指向是指向window

    2、普通函数返回值需要加return 构造函数不需要因为返回的是自己本身


  为什么构造函数没有return却能够有返回值呢?
      因为构造函数在调用的时候系统内部 自动return出了一个this,而这个this就是指的这个对象

这是就不得不说下this的指向问题了

this的指向调用它的对象(可以通过bind/apply/call来改变this的指向)

1.严格模式下this的指向为undefined
2.一个对象 属性this指向window 方法里面的指向为这个对象

3.异步事件this的指向为调用它的对象
  计时器为window
  ajax也为window
4.箭头函数中的this
  此时的 this继承自obj, 指的是定义它的对象obj(也可以理解为它外层的指向就是它的指向)
, 而不是 window,里面只要还是箭头函数就一直是obj 而不是window 如若不是则是window(会继承下来)

var obj={
    say:function(){
        un=()=>{
            console.log(this)  //obj
            cn=function(){
                console.log(this)//window
            }
            cn()
            dn=()=>{
                console.log(this) //obj
            }
            dn()
        }
        un()
    }
}
obj.say()
var obj={
    say:function(){
        setTimeout(()=>{
    console.log(this) //obj
  });
        (function(){
            console.log(this) //window
        })()
        setTimeout(function(){
            console.log(this) //window
}) } } obj.say()

这里要注意输出顺序函数声明提升


5.箭头函数和普通函数混用
  

var obj = {
  say: function () {
     console.log(this) //obj   un
=function(){     console.log(this) //没有宿主对象,默认是window     setTimeout(()=>{     console.log(this) //定义它对象的obj是window   })   }   un() } } obj.say()

6.严格模式下的混用
箭头存在其中依然是undefinde
严格模式下,没有宿主调用的函数中的this是undefined!!!所以箭头函数中的也是undefined!

猜你喜欢

转载自www.cnblogs.com/lianqing/p/9073863.html
今日推荐