<1>javascript原型继承:

基本规则:1.所有的数据都是对象2.要得到一个对象,不是通过实例化一个类,而是找到一个原型并克隆

3.对象会记住他的原型

js提供了一个_proto_的隐藏属性,默认指向它的构造器的原型对象,即{Constructor}.prototype

4.如果对象无法响应某个请求,会把请求委托给自己的原型

var A=function(){};

A.prototype={name:'seve'};

var B=function(){};

B.prototype=new A();

var b=new B();

console.log(b.name);

分析如下:

首先,尝试遍历对象 b 中的所有属性,但没有找到 name 这个属性。

查找 name 属性的请求被委托给对象 b 的构造器的原型,它被 b.__proto__ 记录着并且指向 B.prototype,

而 B.prototype 被设置为一个通过 new A()创建出来的对象。 

在该对象中依然没有找到 name 属性,于是请求被继续委托给这个对象构造器的原型 A.prototype。

在 A.prototype 中找到了 name 属性,并返回它的值

 *:继承总是发生在对象和对象之间

var A = function(){}; A.prototype = { name: 'sven' }; var B = function(){}; B.prototype = new A(); var b = new B(); console.log( b.name ); // 输出:sven 再看这段代码执行的时候,引擎做了什么事情。  首先,尝试遍历对象 b 中的所有属性,但没有找到 name 这个属性。 图灵社区会员 轩辕 专享 尊重版权 22 第 1 章 面向对象的 JavaScript  查找 name 属性的请求被委托给对象 b 的构造器的原型,它被 b.__proto__ 记录着并且指向 B.prototype,而 B.prototype 被设置为一个通过 new A()创建出来的对象。  在该对象中依然没有找到 name 属性,于是请求被继续委托给这个对象构造器的原型 A.prototype。  在 A.prototype 中找到了 name 属性,并返回它的值。