-
Notifications
You must be signed in to change notification settings - Fork 0
prototype
2012 edited this page Jul 20, 2020
·
2 revisions
区别
原型链是基于原型实现的,多个原型连着一起就形成了原型链;而原型既是一个很隐秘的东西,又是一个很大众的东西。隐秘是因为它在代码中看不见、摸不着,没法直接通过原型的点运算符得到;大众是因为在 js 中到处可见,如 toString/call/apply/push/concat 等等,这些方法都从原型上来的。
直白点就是,点运算符访问属性值,如果在对象中找不到,就会找对象的原型,如果对象的原型也不存在该属性值,就继续找对象的原型的原型...以此类推,直到找到或某个原型为 null,这条链就形成了一条原型链
- prototype: 每个函数都有这个原型的指针,函数的实例通知原型实现继承、共享
- __proto__: 每个对象(js 里一切都是对象,所以都有这个隐秘的原型)都有这个指针,指向它的构造函数的原型
每个构造函数都有一个原型对象(prototype),原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针(隐士原型__proto__)。所有普通的原型链都指向Object.prototype
。可以通过Object.create()
实现原型继承
看例子说话:
function Test() {}
var ins = new Test();
var obj = {};
var reg = /test/;
Test.__proto__ === Function.prototype;
Test.prototype === { constructor: Test };
Test.constructor === Function;
ins.__proto__ === Test.prototype;
ins.prototype === undefined;
ins.constructor === Test;
ins.__proto__.__proto__ === Object.prototype;
obj.__proto__ === Object.prototype;
obj.prototype === undefined;
obj.constructor === Object;
reg.__proto__ === RegExp.prototype;
reg.prototype === undefined;
reg.constructor === RegExp;
reg.constructor.__proto__ === Object.__proto__;
Object.__proto__ === Function.prototype; // Object是一个构造函数
JS
CSS
- float
- BFC
- position
- flex
- grid
DOM
- DOM
- how browser works
Node.js
react
- 生命周期
- setState
- hook
git
- git 基础命令
- git rebase 理解
- git bisect
- git commit
- git hook
设计模式
- 策略模式
- ...
TCP/IP 协议
- HTTP/1.x
- HTTP/2
- SSL/TLS
- TCP
- DNS
- HTTP Cache
- CORS
- http status code
linux(shell)知识点