通过javascript中的new认识基于原型的面向对象。

转载 2012年03月31日 13:29:37
j
函数就是对象。
其实通常我们在javascript里定义的一个函数,都对应着一个以这个函数体为构造函数的对象。
而javascript与java不同的是,他是面向原形的面向对象语言。java是基于类的面向对象语言。
也就是说,可以通过对象来new出一个新的对象。
比如:定义 function fun(p1,p2){} 时, 实际上生成了一个Function类型(预定义类型)的对象,对象名叫fun,对象的构造函数就是这个函数的体. 
于是,也可以用另一种方式定义刚才的函数(其实是对象)。
fun=new Function(‘p1,’p2’,…) ;(这种方式定义时,前面的参数都是函数的参数。只有最后一对 ‘’ 里,写入函数体)
对于这个对象,采用fun.var=“XXX”的方式,就可以为对象增加一个属性。而无须声明。

从对象org 去new一个新对象时,首先调用该org的构造函数(函数org定义时的函数体为对象 org的构造函数)。
然后将org对象的prototype属性的子属性(函数和变量)copy到新对象中。
还有构造函数里以 this.XXX= [ function (){}或“xxx”] 形式定义的XXX属性也copy到新对象中去。

当然在对象生成后,也可以另行添加属性(即函数)。
一种方式是其父对象的prototype.xxx下添加,一种是其自己 self.xxx方式添加。
在搜索的时候,先搜索自身然后在搜索父对象的prototype下的属性。即后者可以覆盖前者。


  在JavaScript中,prototype对象是实现面向对象的一个重要机制。

  每个函数就是一个对象(Function),函数对象都有一个子对象 prototype对象,类是以函数的形式来定义的。prototype表示该函数的原型,也表示一个类的成员的集合。
  在通过new创建一个类的实例对象的时候,prototype对象的成员都成为实例化对象的成员。
  1、该对象被类所引用,只有函数对象才可引用;
  2、在new实例化后,其成员被实例化,实例对象方可调用。
  同时,函数是一个对象,函数对象若直接声明成员,不用被实例化即可调用。

相关文章推荐

javascript如何实现面向对象和继承机制

面向对象:function MyObject(){ this.name="myObject"; this.type="class"; this.methodA=function...

C++和Java程序员的Smalltalk入门收藏

C++和Java程序员的Smalltalk入门收藏 新一篇: 原来可以用中文写代码,可以编译 | 旧一篇: 由一个Bug看ifstream中read()与readsome()的区别 fun...

Javascript高级程序设计——14.面向对象与原型(2)

1、创建原型访问prototype有两种方法 (1)构造函数实例方法创建 构造函数:在对象创建或者实例化时候被调用的方法。通常使用该方法来初始化数据成员和所需资源。 构造器Const...
  • zxy9602
  • zxy9602
  • 2016年12月10日 12:32
  • 262

javascript 面向对象(六)原型的特性和作用

1、根据实例对象获得原型对象    Object.getPrototypeOf() function Person(){ } Person.prototype.name = "梁"; ...

JavaScript原型面向对象构造

1 封装 先使用构造函数声明一个类,在构造函数中给this添加本地属性,并实例化一个对象,这种方式可以为对象声明一个公共的本地属性: function Animal(name) {      t...

JavaScript 面向对象与原型、继承

一、创建对象 1、直接new var box = new Object(); //创建一个Object 对象 box.name = 'Lee'; //创建一个name 属性并赋值 box.age = ...

JavaScript-形象理解面向对象、原型和继承

这是第二次整体复习JavaScript的面向对象与原型方面的知识。这部分的知识比较抽象但是又十分重要。它对后期类库的封装,整体架构的实现非常重要。在这节我将对每个方式进行形象全面的讲解。...

Javascript面向对象(四)——函数原型

javascript函数原型 现代javascript中,我们可以通过使用__proto__设置原型,但这不总是这样。javascript从一开始就有原型继承,它是javascript语言的核心特...

Javascript面向对象(三)——原型继承

原型继承 实际编程中,我们经常需要一些东西并扩展之。例如,我们有user对象,带有属性和方法,现在想要admin和guest,和其稍微有些变化,我们最好重用user对象,但不是复制/重新实现它的方...

javascript--面向对象(二)构造函数式的缺点和原型prototype

1、构造函数方式创建对象的缺点         构造函数方式 每次创建对象都会重新定义属性和方法,对于一样的属性和方法就会造成浪费 创建对象会执行一边Person这个函数,属性和方法会重新定义一遍 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过javascript中的new认识基于原型的面向对象。
举报原因:
原因补充:

(最多只允许输入30个字)