JavaScript的原型与继承

首先,什么是原型:

JavaScript里所有函数,变量方法都是对象,而对象对应的就是原型(prototype).

所以以此来看,JS里任何的对象都有一个原型对象,而默认的原型对象就处在原型链的最顶端。

现在说到了一个新的概念,什么是原型链?

在JavaScript中,一共有两种类型的值,原始值和对象值.每个对象都有一个内部属性[[prototype]],我们通常称之为原型.原型的值可以是一个对象,也可以是null.如果它的值是一个对象,则这个对象也一定有自己的原型.这样就形成了一条线性的链,我们称之为原型链.

通俗的来说,就是一个对象在创建之后,他实际上是继承它的原型链最顶端的属性的。

那么现在有一个简单的问题,应该如何解答呢?

function a () {

var c =123;

c.prototype = 12;

var b = new c();

return b;

}

上面只是用伪代码的方式,询问了一个问题,那么B的值究竟是什么呢?

答案是:123;

因为根据原型链的定义,JS解释器首先按照原型链,自下而上的查找对象的属性值,那么在最下部查找时,就会发现并返回var c=123这个值。

那么现在变一下,不给对象C赋值,直接获取C的值呢?那么答案就会变成12,因为当解释器找不到赋值时,会自动向上查找,此时它发现C的原型上居然有值12,那么就取出返回给函数。

 

posted on 2016-02-29 18:09  崭新的码农  阅读(115)  评论(0)    收藏  举报