关于JavaScript原型链的理解

JavaScript的原型链概念,发现没有一个统一的表述或者定义,都是通过举例子,打比方来表述,感觉不精确也不合理,所以这里研究一下.

我对原型链的定义

在JavaScript中,每一个实例对象都有一个私有属性__proto__,这个__proto__指向它的构造函数的原型对象,该原型对象又有自己的原型对象,层层链接,形成原型链.

关于原型链的一些问题

1. JavaScript的类

类是创建对象的模板.

(1) es6的类

es6中类提供了class原生API,它同样是基于原型的类.

(2) es5的类

es5中的类没有原生API,以下几种方法构造类.

>1 构造函数法
var Person = function(name, age) {
        this.name = name;
        this.age = age;
};
Person.prototype.sayHello = function() {
    alert(this.name);
}
var p = new Person('s', 123);
复制代码
>2 Object.create法
var Cat = {
    name: 'Tom',
  age: 3,
  color: 'black',
  foot: 4,
  makeSound: function () {
    alert("喵喵")
    },
  sayName: function () {
    alert(this.name)
    }
}
var c = Object.create(Cat);
c.sayName();
复制代码
>3 极简主义法

荷兰程序员的方法

首先,它也是一个对象模拟类。在这个类里面,定义一个构造函数createNew()用来生成实例。

var Cat = {
  createNew :function(){
    var cat = {}
    cat.name = 'Tom'
    cat.makeSound = function(){
      alert("喵喵")
    }
    cat.sayName = function(){
      alert(this.name)
    }
    return cat
  }
}
// 得到类的实例
var cat1 = Cat.createNew();
复制代码

类的继承

只需要在子类的createNew方法中调用父类的createNew方法即可

// 父类
var Animal = {
    createNew: function(){
      var animal = {};
      animal.sleep = function(){ alert("睡懒觉"); };
      return animal;
    }
  };

// 子类
var Cat = {
  createNew: function() {
    var cat = Animal.createNew()
    cat.name = 'Tom'
    cat.makeSound = function(){
      alert("喵喵")
    }
    cat.sayName = function(){
      alert(this.name)
    }
    return cat
  }
}

var cat1 = Cat1.createNew()
cat1.sleep()// 睡懒觉
复制代码

私有属性

例如上面代码子类Cat的name属性就是私有的,外部获取不了,只能通过子类的内部方法获取.

var cat1 = Cat1.createNew()
cat1.name //undefined
复制代码

数据共享

如果需要多个类的实例共享同一个数据,则放在类对象里面,createNew的同级即可实现.

var Cat = {
  sound: "喵喵"。
  createNew: function(){
    var cat = {}
    cat.makeSound = function(){
      alert(Cat.sound)
    }
    cat.changeSound = function(x){
      Cat.sound = x
    }
    return cat
  }
}
var cat1 = Cat.createNew()
var cat2 = Cat.createNew()
cat1.makeSound() // 喵喵
复制代码

2. JavaScript的继承实现

JavaScript的类实现有哪几种方式,继承怎么实现

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享