原型链

2019-10-07  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读