博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中的JS原型链 prototype
阅读量:5355 次
发布时间:2019-06-15

本文共 939 字,大约阅读时间需要 3 分钟。

任何一个对象都有一个prototype的属性,在js中可以把它记为:__proto__

当初ECMAscript的发明者为了简化这门语言,同时又保持继承的属性,于是就设计了这个链表。。 

在数据结构中学过链表不,链表中有一个位置相当于指针,指向下一个结构体。 
于是乎__proto__也一样,每当你去定义一个prototype的时候,相当于把该实例的__proto__指向一个结构体,那么这个被指向结构体就称为该实例的原型。 
文字说起来有点儿绕,看图说话 

var foo = { 

x: 10, 
y: 20 
}; 

Figure 1. A basic object with a prototype.

当我不指定__proto__的时候,foo也会预留一个这样的属性, 

如果有明确的指向,那么这个链表就链起来啦。很明显,下图中b和c共享a的属性和方法,同时又有自己的私有属性。 
__proto__默认的也有指向。它指向的是最高级的object.prototype,而object.prototype的__proto__为空。

var a = { 

x: 10, 
calculate: function (z) { 
return this.x + this.y + z 
}; 
var b = { 
y: 20, 
__proto__: a 
}; 
var c = { 
y: 30, 
__proto__: a 
}; 
// call the inherited method 
b.calculate(30); // 60 

Figure 2. A prototype chain.

理解了__proto__这个属性链接指针的本质。。再来理解constructor。 当定义一个prototype的时候,会构造一个原型对象,这个原型对象存储于构造这个prototype的函数的原形方法之中. 

function Foo(y){ 

this.y = y ; 
Foo.prototype.x = 10; 
Foo.prototype.calculate = function(z){ 
return this.x+this.y+z; 
}; 
var b = new Foo(20); 
alert(b.calculate(30)); 

Figure 3. A constructor and objects relationship.

 

转载于:https://www.cnblogs.com/RunForLove/articles/4783461.html

你可能感兴趣的文章
[转载]电脑小绝技
查看>>
windos系统定时执行批处理文件(bat文件)
查看>>
thinkphp如何实现伪静态
查看>>
BZOJ 2243: [SDOI2011]染色( 树链剖分 )
查看>>
BZOJ 1925: [Sdoi2010]地精部落( dp )
查看>>
c++中的string常用函数用法总结!
查看>>
[DLX精确覆盖+打表] hdu 2518 Dominoes
查看>>
SuperMap iServerJava 6R扩展领域开发及压力测试---判断点在那个面内(1)
查看>>
Week03-面向对象入门
查看>>
一个控制台程序,模拟机器人对话
查看>>
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇——纯前端多页面)
查看>>
我的PHP学习之路
查看>>
【题解】luogu p2340 奶牛会展
查看>>
对PostgreSQL的 SPI_prepare 的理解。
查看>>
解决响应式布局下兼容性的问题
查看>>
使用DBCP连接池对连接进行管理
查看>>
【洛谷】【堆+模拟】P2278 操作系统
查看>>
hdu3307 欧拉函数
查看>>
Spring Bean InitializingBean和DisposableBean实例
查看>>
[容斥][dp][快速幂] Jzoj P5862 孤独
查看>>