使用prototype 对象定义类成员

使用prototype 对象定义类成员
上一节介绍了类的实现机制以及构造函数的实现,现在介绍另一种为类添加成员的机
制:prototype 对象。当new 一个function 时,该对象的成员将自动赋给所创建的对象,例
如:
<script language="JavaScript" type="text/javascript">
<!--
//定义一个只有一个属性prop的类
function class1(){
this.prop=1;
}
//使用函数的prototype属性给类定义新成员
class1.prototype.showProp=function(){
alert(this.prop);
}
//创建class1的一个实例
var obj1=new class1();
//调用通过prototype原型对象定义的showProp方法
obj1.showProp();
//-->
</script>
因为prototype 是一个JavaScript 对象,所以可以为prototype 对象添加、修改、删除方
法和属性。从而为一个类添加成员定义。
了解了函数的prototype对象,现在再来看new的执行过程。
(1)创建一个新的对象,并让this指针指向它;
(2)将函数的prototype对象的所有成员都赋给这个新对象;
(3)执行函数体,对这个对象进行初始化的操作;
(4)返回(1)中创建的对象。
和上一节介绍的new 的执行过程相比,现在是多了用prototype 来初始化对象的过程,
这也和prototype 的字面意思相符,它是所对应类的实例的原型。这个初始化过程发生在函
数体(构造器)执行之前,所以可以在函数体内部调用prototype 中定义的属性和方法,例
如:
<script language="JavaScript" type="text/javascript">
<!--
//定义一个只有一个属性prop的类
function class1(){
this.prop=1;
this.showProp();
}
//使用函数的prototype属性给类定义新成员
class1.prototype.showProp=function(){
alert(this.prop);
}
//创建class1的一个实例
var obj1=new class1();
//-->
</script>
和上一段代码相比,这里在class1 的内部调用了prototype中定义的方法showProp,从
而在对象的构造过程中就弹出了对话框,显示prop属性的值为1。
需要注意,原型对象的定义必须在创建类实例的语句之前,否则它将不会起作用,例如:
<script language="JavaScript" type="text/javascript">
<!--
//定义一个只有一个属性prop的类
function class1(){
this.prop=1;
this.showProp();
}
//创建class1的一个实例
var obj1=new class1();
//在创建实例的语句之后使用函数的prototype属性给类定义新成员,只会对后面创建的对象有效
class1.prototype.showProp=function(){
alert(this.prop);
}
//-->
</script>
这段代码将会产生运行时错误,显示对象没有showProp 方法,就是因为该方法的定义
是在实例化一个类的语句之后。
由此可见,prototype对象专用于设计类的成员,它是和一个类紧密相关的,除此之外,
prototype还有一个重要的属性:constructor,表示对该构造函数的引用,例如:
function class1(){
alert(1);
}
class1.prototype.constructor(); //调用类的构造函数
这段代码运行后将会出现对话框,在上面显示文字“1”,从而更容易看出一个prototype
是和一个类的定义紧密相关的。实际上:class1.prototype.constructor===class1。

使用prototype 对象定义类成员,布布扣,bubuko.com

时间: 2024-10-13 14:28:00

使用prototype 对象定义类成员的相关文章

javascript学习笔记---ECMAScriptECMAScript 对象----定义类或对象

使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象. ECMAScript 拥有很多创建对象或类的方法. 原始的方式 因为对象的属性可以在对象创建后动态定义(后绑定),类似下面的代码: var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() { alert(this.color); };不过这里有一

C#定义类成员

1.成员定义 public--成员可以由任何代码访问. private--成员只能由类中的代码访问(如果没有使用任何关键字,就默认使用这个关键字). internal--成员只能由定义它的程序集(项目)内部的代码访问. protected--成员只能由类或派生类中的代码访问. 后两个关键字可以合并使用,所以也有protected internal成员.他们只能有项目(更确切地讲,是程序集)中派生类的代码来访问. 也可以使用关键字 static 来声明字段.方法和属性,这表示它们是类的静态成员,而

python-面向对象(四)——类成员的访问方式汇总

类成员的访问方式 #!/usr/bin/env python # _*_coding:utf-8 _*_ class pepole(object): '''This is __doc__ information!!!''' country = "CHINA" #静态字段 存在类里 __city = "BeiJing" #私有静态字段 def siyou(self): #私有字段在内部设置方法可以访问 return pepole.__city def __init__

13.C# 定义类成员

1.定义字段 class MyClass { public int MyInt; } 字段可以用readonly修饰,表示该字段只能在构造函数中赋值,还可以用static表示该字段是静态字段 class MyClass { public int MyInt=17;//注意公共字段使用PascalCasing标准命名,即每个单词首字母大写 private int age=18; //私有变量用camelCasing标准命名,首字母小写,之后每个单词首字母大写 public int StaInt =

第1章 类和对象——定义类和创建对象

1.1     定义类.创建对象 在编程时,要定义类,然后在创建这个类的对象(实例). 1.1.1 定义类 定义类的语法个式如下: 访问修饰符 Class 类名 {     类的成员1:     ................     类的成员n:       } 各项的含义如下. 1)  “访问修饰符”用来限制类的作用范围或访问级别,类的修饰符只有public和internal两种(嵌套类除外).其中,声明为public的类可以被任何其他类访问:声明为internal的类智只能从同一个程序集

php类成员函数二次定义,动态定义类成员函数

应用场景:1.动态载入类成员(一些swoole框架,修改的代码需要重载服务器,可以动态多次载入扩展函数文件)2.团队开发写同一个文件的避免冲突,自己单独可以一个扩展文件:3.一个类的代码太多太多,将一些成员函数分解到多个文件中: <?phpclass user{static $funcs=array(); static function ext($method,$func){self::$funcs[$method]=$func;}//调用一个不存在的方法 function __call($fu

P4 类、对象、类成员简介

本节内容 类(class)是显示世界事物的模型. 现实中的一架飞机========================>>>抽象为程序世界中的类 类与对象的关系 对象也叫做实例,是类经过实例化得到的内存中的事宜 有些类不能被实例化,如数学,我们不能说一个数学 依照类,我们可以创建对象>>>这就是实例化 现实世界中常称对象,程序世界中常称实例,二者并无太大区别,常常混用,不用太纠结. 使用new操作符创建对象 △14:15开始编写程序>>>接下来我们自己动手

C#002类,对象,类成员简介

本节内容 1.类(class)是现实世界事物的模型 2.类与对象的关系,什么时候叫“对象”什么时候叫“实例” 3.引用变量与实例的关系 4.类的三大成员: ①属性(Property): ②方法(Method): ③事件(Event) 5.类的静态成员与实例成员 ①关于“绑定”(Binding) 1.类(class)是现实世界事物的模型 类是对现实世界事物进行抽象所得到的结果类包括“物质”(实体)与“运动”(逻辑)建模是一个去伪存真.由表及里的过程 2.类与对象的关系 ①对象也叫实例,是类经过“实

让类成员函数指针成为可调用对象

类成员函数指针实践上是一个指针类型,不可直接通过调用运算符()作为可调用对象调用,一般调用该类成员函数指针需要指定该指针对应的对象. 一般情况下调用类成员函数指针: // a.h #ifndef A_H #define A_H #include <iostream> using std::cout; using std::endl; class A{ public:     void print(); }; #endif // a.cpp #include "a.h" vo