JavaScript 基于原型的对象(创建、调用)

JavaScript中的对象有三种
1,内部对象
如Array,Boolean,Data,Math,Number,Object,RegExp,String对象等
这些对象系统给我们提供了各自的属性与方法供调用。
2,基于类的对象
用类的方式实现对象的引用,这些类需要我们自己定义
3,基于原型的对象
提供有关如何使用 JavaScript 基于原型的对象模型的指南,并且提供指向特定信息的链接,这些信息描述基于原型的对象的自定义构造函数和继承。

在我们写js代码的时候,内部对象是不可避免的要引用,但是光靠这些对象是不够的,所以需要我们自己定义对象,这个时候通常用到的对象是第三种,即基于原型的对象,下面就如何创建自己的对象,定义对象的方法、属性,调用对象给出详细的说明。


复制代码 代码如下:

//JScript 的一个强大功能是能够定义构造函数,以创建自定义的基于原型的对象,以便在您的脚本中使用。
//要创建基于原型的对象的实例,首先必须定义一个构造函数。
//此过程将创建一个新对象并将它初始化(创建属性并赋初始值)。
//当完成后,构造函数将返回对所构造对象的引用。
//在构造函数内部,创建的对象是通过 this 语句引用的。
function people(name,age)//定义people对象
{
this.mName=name;//这里的mName表示属性,无需在外面定义,this指示的是people这个对象
this.Age=age;
this.category="哺乳动物";
this.toString=Exporting;//方法,注意这里只能写toString,而不是toString()
this.myMethod=function()//等价于this.myMethod=method;然后下面写method的方法
{
return "你好";
}
}
function Exporting()//可以有返回值,但函数名前不用写返回值的类型,如string,int之类
{
return "我的名字是——"+this.mName+",年龄是——"+this.Age;
}
/*function method()
{
return "你好";
}*/
people.prototype.getName=function()//在构造函数外面写方法,
//也也可以这样写function people.prototype.getName()
//等价于在构造函数里面的方法:this.getName
{
return this.mName;
}
people.prototype.getAge=this.Age;//在构造函数外面写属性,
//等价于在构造函数里面的方法:this.getAge
function people.prototype.getMoney()//同people.prototype.getMoney=function()等价
//也等价于在构造函数里的写法:this.getMoney
{
return "1000";
}
function show()//调用people对象
{
var me=new people("刘德华",22);//实例化people对象,关键字new
//var myName=me.getName();
//alert(myName);
me.sex="男";//这里的sex属性只能用于me这个实例,即特有属性
//而如果有定义var you =new people("小强",1);
//you这个实例却不能调用sex属性
//如果要这两个实例都可以引用的话应该把sex属性写作people.prototype.sex
//alert(me.sex);
//alert(me.category);
//alert(me.toString());//或者直接写alert(me)即可
//alert(me.myMethod());
//alert(me.getMoney());
alert(me.myMethod()+"\n姓名:"+me.getName()+"\n性别:"+me.sex+"\n类别:"+me.category+"\n总资产:"+me.getMoney()+"\n总结:"+me.toString());
}

根据上面的思路,可以在JavaScript内置对象上添加其它属性或者方法,下面为String对象增加一
good方法和bad属性,这是内置对象中所没有的方法和属性


复制代码 代码如下:

String.prototype.good=function()//自定义方法
{
return "恭喜你成功对内置String对象追加good方法";
}
String.prototype.bad="恭喜你成功对内置String对象追加bad属性";//自定义属性
function test()//调用String对象追加的属性和方法
{
var str="good good study";//定义一个字符串实例str
alert(str.good()+"\n"+str.bad);//调用自定义的string对象的方法good和属性bad
}

最后在html中添加两个button按钮,测试对象people和string对象追加的方法和属性


复制代码 代码如下:

<html>
<title>JavaScript基于原型的对象</title>
<body>
<div>
<input type="button" value="自定义对象定义" onclick="show()">
</div>
<div>
<input type="button" value="内置对象追加方法" onclick="test()">
</div>
</body>
</html>

测试结果通过。。。。。。。表明对象的创建、对象方法属性的调用、内部对象的追加方法和属性调用都是正确的。

时间: 2009-10-13

Javascript 原型和继承(Prototypes and Inheritance)

JavaScript 对象从一个原形对象(prototype object) 继承属性.所有对象都有原型:原型的所有属性看上去就像使用它作为原型的那些对象的属性一样.简单的说就是:所有对象都从他的原型继承属性. (each object inherits properties from its prototype). 对象的 prototype 通过它的 constructor function 来定义.JavaScript 里所有的 function 都有一个 prototype 属性.这个属

javascript prototype的深度探索不是原型继承那么简单第1/3页

1 什么是prototype JavaScript中对象的prototype属性,可以返回对象类型原型的引用.这是一个相当拗口的解释,要理解它,先要正确理解对象类型(Type)以及原型(prototype)的概念.         前面我们说,对象的类(Class)和对象实例(Instance)之间是一种"创建"关系,因此我们把"类"看作是对象特征的模型化,而对象看作是类特征的具体化,或者说,类(Class)是对象的一个类型(Type).例如,在前面的例子中,p1和

JS类中定义原型方法的两种实现的区别

我们知道,给JavaScript类添加原形(prototype)方法是很简单的.而且常用的有下面这两种方法,可是这两种方法在使用时有区别吗? JScript Class: function JSClass() { } Extends prototype method: JSClass.prototype.MethodA = function() { }; Or function = JSClass.prototype.MethodA() { }; 其实这两个原形定义方式可以简化一下来讨论,先把它

javascript prototype 原型链

JavaScript中的prototype概念恰如其分地反映了这个词的内含,我们不能将其理解为C++的prototype那种预先声明的概念. JavaScript 的所有function类型的对象都有一个prototype属性.这个prototype属性本身又是一个object类型的对象,因此我们也可以给这个prototype对象添加任意的属性和方法.既然prototype是对象的"原型",那么由该函数构造出来的对象应该都会具有这个"原型"的特性.事实上,在构造函数

浅析Javascript原型继承 推荐第1/2页

JS没有提供所谓的类继承,据说在2.0中要加入这种继承方式,但是要所有浏览器都实现2.0的特性那肯定又得N多年.昨天看了crockford 的一个视频,里面讲解了一下JS的继承方式,按照PPT里面说的,一共分了三类:Prototypal,pseudoclassical,Parasitic Inheritance. 下面主要介绍一下原型继承:When a function object is created, it is given a prototype member which is an o

javascript 原型模式实现OOP的再研究

复制代码 代码如下: 复制代码 代码如下: function A() { this.v1 = 10; } A.prototype.print = function() { alert(this.v1); } function B() { } B.prototype = new A(); new B().print(); 运行这段代码输出是10,看起来好像是类B继承了类A的方法print,并产生了正确的输出,实际上的执行流程是在类B生成的对象中,不能直接得到方法print,于是在它的prototy

JS类定义原型方法的两种实现的区别评论很多

我们知道,给JavaScript类添加原形(prototype)方法是很简单的.而且常用的有下面这两种方法,可是这两种方法在使用时有区别吗?     JScript Class:  复制代码 代码如下: function JSClass()   {        } Extends prototype method:  复制代码 代码如下: JSClass.prototype.MethodA = function()   { }; Or   复制代码 代码如下: function = JSCla

trim原型函数看js正则表达式的性能

一般情况下用正则写法为: // [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 如果遇到大数据的变长字符串的话就会发现这个是很耗资源的.效率并不高,有的时候甚至无法忍受. /**/ 请在这里写足够多的空格或者tab字符. // [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 在解释这个原因的时候想起以前看到master regular expression里面有提到过.NFA和DFA的引擎是有区别的.js/perl/php/java/.net都是NFA引擎. 而DFA与N

javascript 面向对象全新理练之原型继承

首先创建一个父类的实例化对象,然后将该对象赋给子类的 prototype 属性. 这样,父类中的所有公有实例成员都会被子类继承.并且用 instanceof 运算符判断时,子类的实例化对象既属于子类,也属于父类. 然后将子类本身赋值给它的 prototype 的 constructor 属性.(注意:这里赋值的时候是没有 () 的!) 这一步是为了保证在查看子类的实例化对象的 constructor 属性时,看到的是子类的定义,而不是其父类的定义. 接下来,通过对 o.method1() 调用的

JavaScript中的prototype原型学习指南

原型是什么 Function 类型有一个属性 prototype,直接翻译过来就是原型.这个属性就是一个指针,指向一个对象,这个对象包含一些属性和方法,这些属性和方法会被当前函数生成的所有实例(对象)所共享. 这句话根据前面所说的,细细琢磨下来,就可以得到下面代码: function Person(){ ... } Person.prototype = { country : 'china', sayName : function(){ ... } } 先创建了一个 Function 类型的实例

JavaScript中String.prototype用法实例

本文实例讲述了JavaScript中String.prototype用法.分享给大家供大家参考.具体如下: // 返回字符的长度,一个中文算2个 String.prototype.ChineseLength=function() { return this.replace(/[^\x00-\xff]/g,"**").length; } // 判断字符串是否以指定的字符串结束 String.prototype.EndsWith = function(str) { return this.

javascript 对象 与 prototype 原型用法实例分析

本文实例讲述了javascript 对象 与 prototype 原型用法.分享给大家供大家参考,具体如下: 我们做程序开发的,经常面对的就是一个一个对象.那么在javascript中我们怎么去创建一个类以及一个对象呢? <script type="text/javascript"> //创建一个Test对象 function Test(){ } var test = new Test(); //创建一个对象 var obj = new Object(); //json 对

JavaScript中Object.prototype.toString方法的原理

在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. var arr = []; console.log(Object.prototype.toString.call(arr)) //"[object Array]" 本文要讲的就是,toString方法是如何做到这一点的,原理是什么. ECMAScript 3 在ES3中,Object.prototype.toString方法的规范如下: 15.2.

Javascript中的prototype与继承

通常来说,javascript中的对象就是一个指向prototype的指针和一个自身的属性列表.javascript创建对象时采用了写时复制的理念. 只有构造器才具有prototype属性,原型链继承就是创建一个新的指针,指向构造器的prototype属性. prototype属性之所以特别,是因为javascript时读取属性时的遍历机制决定的.本质上它就是一个普通的指针. 构造器包括: 1.Object 2.Function 3.Array 4.Date 5.String 下面我们来举一些例

JavaScript中的prototype使用说明

1.prototype 在JavaScript中并没有类的概念,但JavaScript中的确可以实现重载,多态,继承.这些实现其实方法都可以用JavaScript中的引用和变量作用域结合prototype来解释. 2.简单的例子 复制代码 代码如下: var Blog = function( name, url ){ this.name = name; this.url = url; }; Blog.prototype.jumpurl = ''; Blog.prototype.jump = fu

深入了解javascript中的prototype与继承

通常来说,javascript中的对象就是一个指向prototype的指针和一个自身的属性列表.javascript创建对象时采用了写时复制的理念.只有构造器才具有prototype属性,原型链继承就是创建一个新的指针,指向构造器的prototype属性.prototype属性之所以特别,是因为javascript时读取属性时的遍历机制决定的.本质上它就是一个普通的指针. 构造器包括: 1.Object2.Function3.Array4.Date5.String 下面我们来举一些例子吧 复制代

Javascript中的Prototype到底是什么

Javascript也是面向对象的语言,但它是一种基于原型Prototype的语言,而不是基于类的语言.在Javascript中,类和对象看起来没有太多的区别. 什么是prototype: function定义的对象有一个prototype属性,prototype属性又指向了一个prototype对象,注意prototype属性与prototype对象是两个不同的东西,要注意区别.在prototype对象中又有一个constructor属性,这个constructor属性同样指向一个constr

JavaScript中构造函数与原型链之间的关系详解

在Javascript中不存在class的概念,它的class概念是通过构造函数(constructor)与原型链(prototype)来实现. 1.构造函数(constructor):创建对象时的初始化对象,总是与new 关键是一同出现. 构造函数存在以下特点: 1.构造函数内的this 指向当前实例对象. 2.使用new 关键字实例化当前对象. 3.构造函数首字母大写,区分普通函数. 4.实例对象都可以继承构造函数中的属性和方法.但是,同一个对象实例之间,无法共享属性. 2.原型(proto

javascript中的prototype属性使用说明(函数功能扩展)

这是一个比较特殊的属性,Javascript中的继承一般都依赖这属性实现. 在Javascript中,一切都是对象,字符串是对象,数组是对象,变量是对象,函数也是对象,所以才会允许['a','b','c'].push('d');这样的操作存在.类本身也是一个对象,也可以定义属性和方法: 复制代码 代码如下: function Test(){}; Test.str = 'str'; Test.fun = function(){return 'fun';}; var r1 = Test.str; /