个人对Javascript的继承思想的理解

  • 构造函数的继承

近看了阮一峰老师对于javascipt继承思想的阐述。自己也加深了对于javascipt的理解

这里写一下个人对于Javascipt继承思想的理解

1.首先需要说明的一点是js(javascipt)是没有类(class)的概念。具体是为什么没有。根据js的创始人(工程师Brendan Eich)的思想是不想让这门语言太过于正式。也不会增加入门的难度;

不同于大部分面向对象的编程语言(C.java等).js的继承实际是通过原型对象protype来表示。

在js中,我们是通过new命令加一个构造函数来建造一个实力对象的。但是没有类。。怎么来表示原型对象,。

比如我们现在有一个构造函数

function dog(name){

}

然后我们来构建一个实例对象

var dog1=new dog(“大黄:“);

现在我们又有一个构造函数
function animal(){
this.special=”动物“
}

怎么让dog去继承animal函数的special属性

一般来说。我们可以直接通过apply()和call函数来直接扩展dog构造函数的作用域。

//我觉得但这个并不是属于继承的思想。只能说是对于js的一种技巧来实现继承而已而已。

这个可以说是改造构造函数拉力实现继承

初次之外。我们可以在animal对象通过prototype属性直接指向cat的prototype

这样就完成了继承

proto大部分的时候我们表示的是我们所创建的对象的构造器的原型。。。
proto===constructor.prototype

我们可以用原型链来举例子

我们可以知道

当我们创建一个

var a={}的空对象的时候。系统会自动引用js来创建一个新对象,实际也是一个继承

实际等价于var a=new Object();

如果在控制台上敲入的时候我们其实可以看到a.proto=Object.prototype的、实际上我们知道a是继承于object

constructor属性,。在js里面每一个prototype属性都有constructor属性。用来执向他的构造函数

  Cat.prototype = new Animal();

  Cat.prototype.constructor = Cat;
  var cat1 = new Cat(“大毛”,”黄色”);
  alert(cat1.species); // 动物

非构造函数的继承

现在我们又两个对象

一个是var Chinese={
nation:’中国‘;
}
另外一个是var doctor={
career:’医生’
}

现在我们怎么把它变成一个中国医生呢

我们有一个object的方法是这样的(发明json的人想出来的)

function object(o) {
    function F() {}
    F.prototype = o;
    return new F();
  }

这个object()函数,其实只做一件事,就是把子对象的prototype属性,指向父对象,从而使得子对象与父对象连在一起。
使用的时候,第一步先在父对象的基础上,生成子对象:

  var Doctor = object(Chinese);

  • 未完,后续更新

猜你喜欢

转载自blog.csdn.net/TOM_YIJIAN/article/details/80936210