首先,什么是原型:
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,那么就取出返回给函数。
时间: 2024-10-12 00:33:30