WEB开发网
开发学院网页设计JavaScript javascript必知必会之prototype 阅读

javascript必知必会之prototype

 2009-09-21 00:00:00 来源:WEB开发网   
核心提示: 基本是按照下面的流程和顺序来进行.1. 先去搜索函数对象本身的属性,如果找到立即执行2. 如果1没有找到,则会去搜索prototype属性,有2种结果,找到则直接执行,否则继续搜索 父对象 的 父对象 的prototype, 直至找到,或者到达 prototype chain 的结尾(结尾会是O

基本是按照下面的流程和顺序来进行.

1. 先去搜索函数对象本身的属性,如果找到立即执行

2. 如果1没有找到,则会去搜索prototype属性,有2种结果,找到则直接执行,否则继续搜索 父对象 的 父对象 的prototype, 直至找到,或者到达 prototype chain 的结尾(结尾会是Object对象)

上面也回答如果函数对象本身的属性与prototype属性相同(重名)时的解决方式, 函数本身的对象 优先 .

再看一个多重prototype链的例子:

// 多重prototype链的例子
function Employee(name)
{
this.name = "";
this.dept = "general";
this.gender = "unknown";
}
function WorkerBee()
{
this.projects = [];
this.hasCar = false;
}
WorkerBee.prototype = new Employee; // 第一层prototype链
function Engineer()
{
this.dept = "engineer"; //覆盖了 "父对象"
this.language = "javascript";
}
Engineer.prototype = new WorkerBee; // 第二层prototype链
var jay = new Engineer("Jay");
if (flag)
{
alert(jay.dept);    //engineer, 找到的是自己的属性
alert(jay.hasCar);  // false, 搜索到的是自己上一层的属性
alert(jay.gender);  // unknown, 搜索到的是自己上二层的属性
}

上面这个示例的对象关系如下:

javascript必知必会之prototype

结论

javascript 的prototype给语言本身增加了很强的灵活性,但与 class based programming 相比整个思维逻辑还是有很大的不同,所以需要更多地思考和揣摩.

而 javascript是披着c语言外衣的函数式语言 的理解自然也需要更多地思考.

下一节我会继续讨论下 javascript 的另一个重要而且比较容易弄错的知识 closure.

编缉推荐阅读以下文章

  • javascript必知必会之closure

上一页  1 2 3 

Tags:javascript prototype

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接