<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 属性,并返回它的值。