- 构造函数的继承
近看了阮一峰老师对于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);
- 未完,后续更新