0
点赞
收藏
分享

微信扫一扫

js高级(三)

寒羽鹿 2022-01-26 阅读 67

console 中dir与log的区别

  • log语句打印的是结果,直接显示信息;
  • dir语句打印的是内容,对显示对象的所有属性和方法。

原型与原型链

Object是系统的构造函数,里面就应该有prototype,又是对象,对象里面就应该有__proto__,最终的这个一定会指向null

原型链:是实例对象和原型对象之间的关系,是__proto__原型来链接的

  • 实例对象有__proto__原型

  • 构造函数有prototype原型

  • prototype是对象,那么也有__proto__原型

改变原型指向

假设有两个对象Person,Student

改变原型指向只需要把改对象的prototype修改即可,例如:

Person.prototype = {
    play:function () {
        console.log(this);
    }
}

这样便把Person的原型修改为了一个有play方法的对象

继承

直接将对象的Prototype 指向一个实例对象或对象来继承属性与方法

 为了数据共享,改变了原型指向,做到了继承,但是继承过来的属性值也是一样的

解决:继承的时候不要改变原型的指向,直接调用父级的构造函数的方式来赋值,叫借用构造函数

借用构造函数

在对象里面赋值时,可以直接将父亲的构造函数借用过来用 call方法

function Student(score, name, money, house) {
    this.score = score;
    // 把父亲的构造函数借过来--->改变构造函数的之乡,继承属性
    Person.call(this, name, money, house);
    // this指的是当前函数所创建出来的对象
    // 后面的参数是父亲的形参,这个形参Student要用,所以需要Student的构造函数的小括号接收一下
}

这种方法 的name,maney,house都是利用Person对象的方法来赋值的

总结:

    原型继承:改变原型的指向
    借用构造函数继承:改变构造函数属性的指向
    组合继承:原型继承 + 借用构造函数继承,既能解决属性问题,又能解决方法问题
    拷贝继承:就是把对象中需要共享的属性和方法,以遍历的方式复制到另一个对象

**注意区分属性与方法

拷贝继承

拷贝继承:就是把对象中需要共享的属性和方法,以遍历的方式复制到另一个对象

var obj2 = {};

        for(var key in Person.prototype) {

            obj2[key] = Person.prototype[key];

        }

this指向

  • 普通函数的this指向:window
  • 构造函数的this指向:实例对象
  • 对象和方法中的this指向:当前实例对象
  • 定时器中的this指向:window
  • 原型对象方法中的this指向:实例对象
举报

相关推荐

JS高级三

JS高级 第三天

js高级第三篇

js高级-01

js高级-02

JS高级部分

js高级语法

JS高级十

0 条评论