`
yangsp1
  • 浏览: 48022 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript prototype整理(网上的三种理解)

    博客分类:
  • js
阅读更多
prototype属性,只有function对象中才具有的显式属性;

网上三种理解:
            1:通过构造函数创建的普通对象,通过其constructor属性引用它的构造函数对象,从而间接引用(拥有)了构造对象中的prototype对象;

如图:

此观点的文章:   参看 jimichan的文章:详解javascript类继承机制的原理 中的: “(说成间接的是因为每个object都有一个 constructor 属性指向它的构造函数)。”
非常感谢在此问题上,作者对我的回信;如有冒犯,敬请原谅;

            2:构造函数创建对象时,copy prototype中的属性和代码给所创建的对象。从而使创建的对象拥有了prototype中的所有功能和属性;

如图:

此观点的文章:   参看 yiding_he的文章:领悟 JavaScript 中的面向对象 中的:  “ 在 JavaScript 中,用 new 关键字创建对象是执行了下面三个步骤的:

   1. 创建一个新的普通对象;
   2. 将方法对象的 prototype 属性的所有属性复制到新的普通对象中去。
   3. 以新的普通对象作为上下文来执行方法对象。”

此观点在回贴中被 xieye反对

            3:构造函数在创建对象时,把构造函数中的prototype引用赋给创建的普通对象;也就是说由构造函数创建的对象,都有一个指针指向prototype对象;

如图:

此观点的文章:   参看 李站的文章:悟透javascript中的" 我们已经知道,用 var anObject = new aFunction() 形式创建对象的过程实际上可以分为三步:第一步是建立一个新对象;第二步将该对象内置的原型对象设置为构造函数prototype引用的那个原型对象;第三步就是将该对象作为this参数调用构造函数,完成成员设置等初始化工作。对象建立之后,对象上的任何访问和操作都只与对象自身及其原型链上的那串对象有关,与构造函数再扯不上关系了"   以及  “语法甘露 中的:上面代码的最后一句证明,新创建的对象的constructor属性返回的是Object函数。其实新建的对象自己及其原型里没有constructor属性,那返回的只是最顶层原型对象的构造函数,即Object。”




综上所述:根据贴子:领悟 JavaScript 中的面向对象 中作者 afcn0的回贴 “其实还有补充,就是如果构造函数返回object类型,那new对象无效,prototype问题是楼主还不太了解prototype继承方式,__proto__属性,以及isPrototypeOf方法所至 ” 的提示,查阅了文章:javascript中的继承

此文中提到:jane = new Engineer("Doe, Jane", ["navigator", "javascript"], "belau");

  调用这句时,都发生了什么:

  1  当js看见new操作符,它创建一个新的普通对象,并且设置它的__proto__ 属性为Engineer.prototype。

  2 new 操作符传递这个新的对象作为Engineer 构造器的this的值。

  其实最主要做的事就是上面的两件,剩下的都是很简单的函数调用.



根据上文的提示作了简单测试:
function person(name,b){
	this.name=name;
}

person.prototype.sayHello=function(a){
	//alert("hello,i am "+this.name);
	alert(this==a);
	}


function employee(name, salary)
{
    person.call(this, name);    //调用上层构造函数
    this.salary = salary;       //扩展的成员
};

var p=new person("yangsp",p);
//p.sayHello(p);
//alert(p.constructor);

//下面两句验证了普通对象中确有_proto_属性,且引用的是prototype对象;(在ff下调试,ie下不可);
alert(p.__proto__==person);
alert(p.__proto__==person.prototype))

//alert("p有prototype属性吗? "+p.prototype);	//表明普通对象中没有prototype属性;								




总结:
比较赞同第三种理解;
      即:prototype是function对象中专有的属性。
          _proto_是普通对象的隐式属性,在new的时候,会指向prototype所指的对象;
          普通对象中的constructor属性指向构造函数,因此一个用构造函数创建的对象可能有两种方式关联到prototype.但继承应该是根据_proto_关联到prototype属性;


另外:ecma-262中提到:every object created by that constructor has an implicit reference to the prototype (called the object's prototype) associated with its constructor 以及其图示;不敢肯定它的implicit reference间接还是隐式链接;


感谢所有提借帮助的作者。若有冒犯,敬请原谅;由于本人是新手,所有结论都是根据网上资源整理后自己猜测得出的;所以会有很多错误,真诚期待你的指正;


分享到:
评论
2 楼 yangsp1 2009-10-22  
jimichan 写道

很好,总结的不错,加油

谢谢。
1 楼 jimichan 2009-10-21  

很好,总结的不错,加油

相关推荐

    Prototype整理的学习资料

    Prototype是JavaScript语言中的一种设计模式,它主要用于对象的创建和扩展。这个压缩包中的"Prototype学习笔记.doc"很可能是对Prototype模式深入理解的详细文档。下面将从Prototype设计模式的基本概念、在JavaScript...

    PROTOTYPE 官方+个人整理的帮助文档

    这个标题表明我们即将探讨的是关于Prototype的官方文档,这是一份集合了官方资源和个人理解整理而成的综合指南。Prototype是一个JavaScript库,它为JavaScript编程提供了许多实用的功能,包括对象扩展、类创建、DOM...

    JavaScript学习资料全面整理

    本资源包"JavaScript学习资料全面整理"显然是为了帮助初学者和进阶者深入理解这门语言,包含了各种资源,下面将对JavaScript的一些关键知识点进行详细阐述。 1. **基础概念**:JavaScript是一种解释型、弱类型、...

    「JavaScript学习资料整理」系列,构建JavaScript前端知识体系,积累JavaScript前端开发经验.zip

    这个名为“JavaScript学习资料整理”的系列资源,旨在帮助开发者构建完整的JavaScript前端知识体系,从而深入理解和积累JavaScript的开发经验。通过研究这个压缩包中的内容,我们可以系统地学习JavaScript的各种关键...

    JavaScript中文简介 亲自整理

    JavaScript,是一种广泛应用于网页和网络应用的脚本语言,它主要负责实现客户端的交互效果,增强用户界面。作为互联网上最流行的编程语言之一,JavaScript在网页开发中的地位至关重要。这篇中文简介将帮助初学者理解...

    韩顺平javascript笔记(最全整理 dom编程 oop 基础语法)

    JavaScript是Web开发中不可或缺的一部分,它是一种轻量级的脚本语言,主要应用于网页和网络应用的客户端。韩顺平老师的JavaScript笔记全面涵盖了基础语法、面向对象编程以及DOM编程,这些都是学习JavaScript时至关...

    Javascript忍者的秘密

    在提供的文件列表中,虽然“张孝祥正在整理Java就业面试题大全.doc”并非与JavaScript直接相关,但这个文档可能包含了关于Java面试的知识点,这同样对理解软件开发过程和职业发展有所裨益。了解Java面试常见问题,也...

    Javascript数组操作整理.rar

    本资料"Javascript数组操作整理"聚焦于JavaScript中的数组操作,旨在帮助开发者更好地理解和掌握相关知识。 1. 创建数组: JavaScript提供了多种创建数组的方式,如字面量语法`var arr = [元素1, 元素2, ...]`,或...

    Javascript数组Array操作整理[定义].pdf

    总的来说,理解并熟练掌握JavaScript数组的`length`属性及其动态调整特性,以及如何利用`prototype`来扩展对象功能,是成为一名优秀的JavaScript开发者必备的基础。在软件开发过程中,灵活运用这些知识能够提高代码...

    javascript-思维导图

    JavaScript是一种广泛应用于网页和互联网应用开发的脚本语言,它主要负责实现客户端的交互效果、动态更新内容以及处理用户输入。这份"javascript-思维导图"涵盖了JavaScript的基础知识和核心概念,是学习和复习...

    javascript面向对象技术基础 整理排版了一下

    JavaScript 面向对象技术是编程中的核心概念,它允许我们以更加接近人类思维的方式组织代码,通过模拟现实世界中的对象来实现复杂的功能。...理解并熟练运用这些概念对于编写高效、可维护的JavaScript代码至关重要。

    复习JavaScript面向对象技术

    JavaScript是一种广泛应用于Web开发的脚本语言,尤其在构建交互式网页和动态应用程序时不可或缺。面向对象编程(Object-Oriented Programming, OOP)是JavaScript中的核心概念之一,它允许开发者通过类和对象来组织...

    JavaScript高级程序设计中提到的方法---自己整理

    JavaScript高级程序设计是一门深入理解JS语言核心概念和技术的关键领域。在学习过程中,我们经常会遇到各种挑战,例如UTC和格林威治时间的概念、类型检测、数组的定义、事件处理以及对象原型等。以下是对这些知识点...

    prototype 学习笔记整理

    在JavaScript中,`prototype`是实现面向对象编程的关键机制,它允许对象共享属性和方法,从而实现类的概念。本文将深入探讨`prototype`的核心概念、使用方式以及与之相关的`Class.create()`和`Object.extend()`两个...

    javaScript总结

    JavaScript,又被称为JS,是一种广泛应用于网页和网络应用的编程语言,主要负责实现客户端的动态效果,提升用户体验。它是Web开发三大核心技术之一,与HTML和CSS共同构建了互联网的基石。以下是我根据学习过程和积累...

    javascript高级学习笔记整理

    JavaScript是一种广泛应用于Web开发的动态编程语言,尤其以其在客户端的使用而闻名。在JavaScript中,面向对象编程(OOP)是一种重要的编程范式,它允许我们通过对象和类来组织代码,提高代码的可读性和复用性。在...

    前端笔试题整理(附答案)2021 pdf.pdf

    Promise有三种状态:pending、resolved、rejected。Promise可以then方法将回调函数添加到resolved回调数组中,也可以catch方法将回调函数添加到rejected回调数组中。 6. objectFactory函数 objectFactory函数是一...

    JavaScript Chart 插件整理

    JavaScript Chart 插件是网页开发中用于创建图形和图表的工具,它们可以帮助开发者轻松地将数据可视化,使得信息更易于理解和分析。以下是一些在2010年4月8日收集的JavaScript Chart插件的详细说明: 1. EJSChart:...

    JavaScript 对象详细整理总结

    JavaScript对象是编程中至关重要的部分,它是一种无序的键值对集合,允许你存储和操作数据。在JavaScript中,几乎所有的数据类型都可以被当作对象处理,包括字符串、数字、数组和日期等。对象的属性可以增加、删除,...

    前端面试常见手写题整理.zip

    本压缩包"前端面试常见手写题整理.zip"包含了针对JavaScript的常见面试题目,帮助应聘者准备这些挑战。 1. **变量与数据类型** - JavaScript中的基本数据类型(String, Number, Boolean, Null, Undefined, Symbol,...

Global site tag (gtag.js) - Google Analytics