1.每一个对象都有一个隐藏属性proto,它指向它的原型对象

2.这个对象会享有原型上的属性或者方法

  1. <script>
  2. /* 为什么一个实例化的对象能够使用它原型上的方法 */
  3. function Person(name,age){
  4. this.name=name;
  5. this.age=age;
  6. }
  7. Person.prototype.sayName=function(){
  8. console.log(this.name)
  9. }
  10. /*
  11. 1.每一个对象都有一个隐藏属性__proto__,它指向它的原型对象
  12. 2.这个对象会享有原型上的属性或者方法
  13. */
  14. var wang=new Person("wangsiman",18)
  15. console.log(wang) //Person{name:"wangsiman",age:18}
  16. console.log(wang.__proto__) //{SayName: ƒ, constructor: ƒ}
  17. console.log(wang.__proto__==Person.prototype) //true
  18. </script>

3.如果一个对象自身没有一个方法,它就会从它的原型上去找

object.prototype是终点,是源头
  1. <script>
  2. function Person(name,age){
  3. this.name=name;
  4. this.age=age;
  5. }
  6. Person.prototype.sayName=function(){
  7. console.log(this.name)
  8. }
  9. var wang=new Person("wangsiman",18);
  10. console.log(wang)
  11. console.log(wang.__proto__)
  12. console.log(wang.__proto__==Person.prototype) //true
  13. wang.sayName(wang.toString()) //wangsiman
  14. </script>

image.png

使用extends关键字可以实现继承,之后可以自动拥有父类的属性和方法

  1. <script>
  2. /* 面向对象的方法
  3. function Person(name,age){
  4. this.name=name;
  5. this.age=age;
  6. }
  7. Person.prototype.sayName=function(){
  8. this.name;
  9. } */
  10. /* es6的方法 */
  11. class Person{
  12. constructor(name,age){
  13. this.name=name;
  14. this.age=age;
  15. }
  16. sayName(){
  17. console.log(this.name) //lisi
  18. }
  19. }
  20. /* 使用extends关键字可以实现继承,之后可以自动拥有父类的属性和方法 */
  21. class Student extends Person{
  22. constructor(name,age,skill){
  23. super(name,age); //super指的是Person
  24. this.skill=skill
  25. }
  26. /* //子类下的函数:这种写法是错误的
  27. saySkill(){
  28. console.log(this.skill)
  29. } */
  30. }
  31. var wang=new Person("wangsiman",18);
  32. // /* 父类不能使用子类的方法,子类可以使用父类的方法 */
  33. // wang.saySkill()
  34. var s=new Student("lisi",17,"html")
  35. s.sayName()
  36. console.log(s) //Student("lisi",17,skill:"html")
  37. </script>

在子类的方法中去调用父类的方法—this

  1. class Person{
  2. constructor(name,age){
  3. this.name=name;
  4. this.age=age;
  5. }
  6. sayName(){
  7. console.log(this.name)
  8. }
  9. }
  10. /* 在子类的方法中去调用父类的方法 */
  11. class Student extends Person{
  12. constructor(name,age,skill){
  13. super(name,age); //super指的是Person
  14. this.skill=skill
  15. }
  16. saySkill(){
  17. this.sayName()
  18. }
  19. }
  20. var wang=new Student("lisi",17,"html")
  21. wang.saySkill()
  22. var p=new Person("zhangsan",18)
  23. console.log(Person.prototype)