js没有面向对象机制,或者说js没有实例,所有的“实例”都是将原型指向父“类”的一个新变量。
```
var a = {name: 1, set: function(){this.name = 2}}
var b = Object.create(a);
//b没有name,通过原型链找到a的name
b.name; //1
//调用原型链上的set,此时this使用了隐式绑定,指向b,因此为b创建了一个name属性
b.set();
//b --> {name: 2, __proto__: {name: 1, set: function(){this.name = 2}}}
b.name; //2
a.name; //1
```
```
function Foo(who) {
this.me = who;
}
Foo.prototype.identify = function() {
return 'Im ' + this.who;
}
function Bar(who) {
Foo.call(this, who);
}
Bar.prototype = Object.create(Foo.prototype);
Bar.prototype.speak = function() {
alert(this.identify())
}
var b1 = new Bar('b1');
b1.speak(); //Im b1
//分割线
function Foo(who) {
this.me = who;
}
Foo.prototype.identify = function() {
return 'Im ' + this.who;
}
var b2 = new Foo('b2');
b2.__proto__.speak = function() {
alert(this.identify())
}
b2.speak(); //Im b2
//函数操作prototype,对象操作__proto__,二者实际上是一样的,只是访问的名字不一样
```
- 你不知道的JS上
- 第一部分 第三章 函数作用域和块作用域
- 第一部分 第四章 提升
- 第一部分 第五章 闭包
- 第二部分 第一章 关于this
- 第二部分 第二章 this全面解析
- 第二部分 第三章 对象
- 第二部分 第五章 原型
- 第二部分 第六章 行为委托
- 你不知道的JS中
- 第一部分 第二章 值
- 第一部分 第三章 原生函数
- 第一部分 第四章 强制类型转换
- 第一部分 第五章 语法
- 第二部分 第一章 异步
- 第二部分 第三章 Promise
- 第二部分 第四章 生成器
- 第二部分 第五章 性能
- 你不知道的JS下
- 第一部分 总结
- 第二部分 第二章 语法
- 第二部分 第三章 代码组织
- 第二部分 第四章 Promise
- 第二部分 第五章 集合
- 第二部分 第六章 新增API
- 第二部分 第七章 元编程
- 第二部分 第八章 ES6之后