原型链

作者: 楼水流云 | 来源:发表于2019-10-07 20:58 被阅读0次

    function Person(nike,age){
    this.nike = nike
    this.age = age
    }

    Person.prototype.sayName = function(){
    console.log(this.name)
    }

    var p1 = new Person('ruoyu',100)
    var p2 = new Person('fangfang',20)
    p1.sayName()
    p2.sayName()

    new的时候
    1创建一个新对象
    2去执行这个函数Person 这个函数里的this 是刚刚创建的p1对象
    3当Person执行之后会把 刚刚创建的这个对象return出来
    4把p1的protp指向了 Person的prototype 所以新创建的对象的protp都指向都是Person的prototype

    任何一个对象 肯定有一个函数去创建了它 这个函数的prototype=这个对象的protp
    一个对象想看看是谁创建的只要看看proto里的constructor: xxx 是谁就知道

    原型链继承
    继承是对象直接使用另一对象的属性和方法

    1.得到类的属性继承
    2.得到类的方法继承

    function Person(name,age){
    this.name = name
    this.age = age
    }

    Person.prototype.sayName = function(){
    console.log('My name is' + this.name)
    }

    Person.prototype.walk = function(){
    console.log(this.name + 'is walking')
    }

    var p = new Person('ruoyu',100)//构造函数

    function Student(name,age,sex){
    Person.bind(this)(name,age) //类的属性继承 执行Person 传递参数 this是我创建的对象s
    this.sex = sex
    }

    //.create 方法创建一个拥有指定原形和若干个指定属性的对象
    Student.prototype = Object.create(Person.prototype) //类方法继承 把Person.prototype指定为Student.prototype的原形
    Student.prototype.constructor = Student //把.constructor(Student里面的proto内容)指向了 Student自己

    Student.prototype.doing = function(){
    console.log('I am studing')
    }

    var s = new Student('fangfang',20,'man')
    s.walk()
    s.sayName()
    s.doing()

    s.hasOwnProperty("name") 查看某个属性是属于自己的还是父类的 true 和 false

    相关文章

      网友评论

          本文标题:原型链

          本文链接:https://www.haomeiwen.com/subject/tiqcpctx.html