最近最网上看了一个人面试淘宝时的经历,然后发现了自己有好多好多不太清楚的地方,所以特此写点文章来加深自己对一些问题的理解。
文章中提到了一个问题是:JavaScript是如何实现继承的?
下面我便阐述一些在网上找到的方法和实例来解释下,借以加深自己的印象。
我们知道JavaScript中的function是万能的,除了用于的函数定义,也可以用于类的定义。
JavaScript的继承,说起来也是有点怪,不像C++和一些面向对象的语言,他没有public,private等访问控制修饰,也没有implement或其他特定的符号来说明是实现继承。
关于javascript类的继承可以参考一下下面的这个例子。
代码如下:
<script type="text/javascript">
function Person() {
// 属性
this.Gender = "female";
this.Age = 18;
this.Words = "Silence";
// 方法
this.shouting = function() {
alert("开心哦!父类的方法");
}
}
// 继承
function Programmer() {
this.base = Person;
}
Programmer.prototype = new Person;
// 为子类添加新的方法
Programmer.prototype.typeCode = function() {
alert("俺是敲代码的!IT民工,很不开心。子类的方法");
}
// 调用示例
function sayHello() {
var a = new Programmer();
alert(a.Gender); // 调用父类的属性
a.shouting(); // 调用父类的方法
a.typeCode(); // 调用子类的方法
}
sayHello();
</script>
上例中,首先是声明一个person类,里面包含了一些属性和方法,然后接着又声明了一个programmer类,其中有个base属性,这个属性并不是必需的,但是出于规范以及以后在查找对象所继承的类时都需要写上,然后是给programmer的原型对象(prototype)拷贝了person类;于是便实现了类的继承。
模拟JavaScript中类和继承的一些原理
在面向对象的语言中,我们使用类来创建一个自定义对象。然而JavaScript中所有事物都是对象,那么用什么办法来创建自定义对象呢?
这就需要引入另外一个概念 - 原型(prototype),我们可以简单的把prototype看做是一个模版,新创建的自定义对象都是这个模版(prototype)的一个拷贝 (实际上不是拷贝而是链接,只不过这种链接是不可见,给人们的感觉好像是拷贝)。
让我们看一下通过prototype创建自定义对象的一个例子:
代码如下:
// 构造函数
function Person(name, sex) {
this.name = name;
this.sex = sex;
新闻热点
疑难解答
图片精选