javascript 的object对象的prototype属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 的object对象的prototype属性相关的知识,希望对你有一定的参考价值。

以下是源码,求每一段源码的解释:

function array_max()
var i,max=this[0];
for(i=1;i<this.lenght;i++)

if(max<this[i])
max=this[i];

return max;

Array.prototype.max=array_max;
var x=new Array(1,2,3,4,5,6);
var y=x.max();

这段代码先是给Array(数组)类型添加了一个名为max的方法,目的是求这个数组中各个元素的最大值
然后初始化一个数组,并调用max方法求最大值,结果y应该等于6。
function array_max()
var i,max=this[0]; //首先默认第0个元素是最大的
for(i=1;i<this.lenght;i++)
//遍历第1,2,3,...个元素,找出实际最大的,赋给max变量
if(max<this[i])
max=this[i];

return max;//返回max的值

Array.prototype.max=array_max;//给Array类型的原型增加一个max方法:指向前面定义的array_max函数
var x=new Array(1,2,3,4,5,6);//生成一个数组
var y=x.max();//求最大值追问

分数不够,不能追加悬赏,望能对追问做进一步讲解。
var i,max 为什么同是声明了i和max.这一句声明i的作用是什么。还有this[0]中this的用法能否详细解释下。
剩下的就是prototype这个属性的用法了。书上说该属性返回对象类型原型的引用。用prototype属性可以提供对的类的一组基本功能。对象的新实例“继承”赋予该对象原型的操作。这句话总是没有理解透。看书看的时候卡在这个地方了,一直没有继续前行。

追答

i是遍历数组用的索引变量,取值依次为0,1,2,3,4,...一直到数组长度-1。首先假设this[0]是最大的,将其值保存到max变量中,然后再看this[1]是否比max大,如果大则取而代之;然后再看this[2]、this[3]...直到最后一个元素this[数组长度-1]。这样循环结束后max就一定是整个数组中的最大值。
至于this,看最后一行,在调用x的max()方法时,this会被赋值为点号前面的对象。这时this就是你定义的数组x。
建议楼主看一看面向对象编程的有关知识。
prototype可以实现类似于类继承的效果,将其指向另一个对象的实例就相当于当前类型继承自那个个类型。这个一两句话说不清楚,建议仔细看教程,如果还有问题请继续追问

追问

引用:"这段代码先是给Array(数组)类型添加了一个名为max的方法"指的是function array_max()这一句吗?最后的一个疑问就是max()是从哪来的?恳请讲解!!!

追答

Array.prototype.max=array_max; 是由这句添加的方法
前面定义的函数array_max()名称是无所谓的,也可以换成匿名函数:
Array.prototype.max = function ()
var i,max=this[0];
for(i=1;i<this.lenght;i++)

if(max<this[i])
max=this[i];

return max;

;

参考技术A 就是给所有的数组添加一个名为max的方法.
Array.prototype.max = new function()
var i,max=this[0];
for(i=1;i<this.lenght;i++)

if(max<this[i])
max=this[i];

return max;


var x=new Array(1,2,3,4,5,6);
var y=x.max();

var x=new Array("11","21","31","41");
var y=x.max();

字符串的数组也可以的,只要支持"<"运算符都可以.

《JavaScript语言精粹》—— 继承篇

四、继承

(1) 伪类

JavaScript不直接让对象从其他对象那里继承,反而插入了一个多余的间接层:通过构造器函数产生对象。

当一个函数对象被创建时,Function构造器产生的函数对象会运行类似这样的一些代码:

this.prototype = { constructor : this};

新函数对象被赋予一个prototype属性,它的值是一个包含constructor属性且属性值为该新函数的对象。这个prototype对象是存放继承特征的地方。因为JavaScript语言没有提供一种方法去确定哪个函数时打算用来做构造器的,所以每个函数都会得到一个prototype对象。constructor属性没什么用,主要是prototype。

当采用构造器调用模式,即用new前缀去调用一个函数,函数执行的方式会被修改。

(2) 原型

一个新的对象可以继承一个旧对象的属性。

这一节讲的东西不多,很多东西其实在其他的书中更加详细,这里就不多介绍了吧。

以上是关于javascript 的object对象的prototype属性的主要内容,如果未能解决你的问题,请参考以下文章

javascript:Object对象

在 javascript 中扩展 Array 对象的方法

JavaScript-- 函数既是函数又是对象

Javascript中的Object对象

详解Javascript中的Object对象

javascript:Object 对象的相关方法