JS面向对象,原型,call(),apply()

JS面向对象,原型,call(),apply()

更新时间:2009年5月14日22:56:41作者:

那天我使用了prototype.js,所以我打开了它,看了几行之后我很困惑。原因是我对面向对象的js不太熟悉,所以我尝试了百度+谷歌,最后却收获不大。写这是为了纪念它^ _ ^。

一、原因

那天我使用了prototype.js,所以我打开了它亚博买球 ,看了几行之后我很困惑。原因是我对面向对象的js不太熟悉,所以我尝试了百度+谷歌,最后却收获不大。写这是为了纪念它^ _ ^。

prototype.js代码

复制代码,代码如下:

var Class = {

创建:function(){

return function(){

this.initialize.apply(this,arguments);

}

}

}

// Class的用法如下

var A = Class.create();

A。原型= {

initialize:function(v){

this .value = v;

}

showValue:function(){

alert(this.value);

}

}

var a = new A('helloWord!');

a。 showValue(); //弹出对话框helloWord!

l什么是初始化?

apply方法有什么作用?

l参数变量呢?

l为什么在新A之后执行initialize方法?

找到答案:

二、 Js的对象定向

什么是初始化?

只是一个变量,代表一个方法,其目的是该类的构造函数。

具体功能取决于js的面向对象支持js initialize 函数银河国际 ,那么js的面向对象是什么样的?与Java有什么异同?

查看代码:

复制代码,代码如下:

var ClassName = function(v){

this.value = v;

this.getValue = function(){

返回this.value;

}

this.setValue = function(v){

this.value = v;

}

}

那么JS中的函数和类之间有什么区别?

实际上是一样的。 ClassName是一个函数。当它出现在new之后时,它将用作构造器来构造对象。

例如

复制代码,代码如下:

var objectName1 = new ClassName(“ a”); //获取一个对象

ObjectName1是执行ClassName构造函数后获得的对象,并且ClassName函数中的此对象引用new之后构造的对象,因此objectName1将具有后者的属性和两个方法。您可以这样称呼他们:

复制代码,代码如下:

objectName 1. setValue(``hello'');

alert(objectName 1. getValue()); //对话框问好

alert(objectName 1. value); //对话框你好

然后

复制代码js initialize 函数,代码如下:

var objectName2 = ClassName(“ b”); //获取一个对象

objectName2会得到什么?显然,该方法的返回值是,此处的ClassName仅用作普通函数(尽管首字母大写)。但是之前编写的ClassName中没有返回值,因此objectName2将是未定义的,因此“ b”分配给谁?此处未生成任何对象,但仅执行该方法,因此将“ b”分配给调用此方法的对象窗口。证据如下:

var objectName2 = ClassName(“ b”); //获取一个对象

alert(window.value); //对话框b

因此JS中的所有功能都相同,但是目的可能有所不同(用于构造对象或执行过程)。

现在该回到主题。初始化有什么作用?

复制代码,代码如下:

var Class = {

创建:function(){

return function(){

this.initialize.apply(this,arguments);

}

}

}

var A = Class.create();

此代码是要构造一个函数并将其复制到A。此函数是

复制代码,代码如下:

function(){

this.initialize.apply(this,arguments);

}

后一种方法用作构造函数。使用此构造函数构造对象时,构造对象的Initialize变量将执行apply()方法。 apply()的目的将在后面讨论,并继续初始化。这样,将在初始化对象时联系initialize(联系方式取决于应用)。

然后

复制代码,代码如下:

A.prototype = {

initialize:function(v){

this .value = v;

}

showValue:function(){

alert(this.value);

}

}

是什么意思?

Prototype表示“ prototype”。 A是一个函数(),然后A.原型是该函数中的一个变量,实际上是一个对象。该对象具有什么方法,然后由函数产生的对象具有任何方法,所以

var a = new A('helloWord!');

a。 showValue(); //弹出对话框helloWord!

因此,一个对象还将具有一个initialize方法,不仅如此重庆快三 ,用A构造的每个对象都将具有一个initialize方法,并且如前所述,构造函数将在构造过程中被调用,并且构造函数将释放initialize。调用apply方法,因此当新的A('helloWord!')初始化返回时,将调用apply方法。这就是调用初始化方法。

三、 call()和apply()

让我们开始研究apply(),在Internet上找到一些信息凤凰体育 ,然后结合我自己的研究来了解call()和apply()的功能。功能基本相同。 function()。call(object,{},{}……)或function()。apply(object,[……])的功能是对象对象在这里调用funciton()。区别在于调用参数从第二个开始传递到函子,可以按顺序列出并用“,”分隔。而apply仅具有两个参数,第二个是一个数组,用于存储传递给该函数的所有参数。

this.initialize.apply(this,arguments);

是什么意思?

这里的第一个this指的是用new调用构造函数后生成的对象,即前一个a,因此,当然,第二个this也应指代相同的对象。那么这句话就是这个(即a)调用initialize方法,而参数是arguments对象(parameters的数组对象),因此当执行构造函数时,对象a将执行initialize方法进行初始化,因此它与“初始化”的含义相同。

那么如何传入initialize方法的参数?

四、参数对象

此代码可以解释所有内容:

复制代码,代码如下:

功能测试(){

alert(typeof arguments);

for(var i = 0; ialert(arguments [i]);

}

}

test(“ 1”,“ 2”,“ 3”);

test(“ a”,“ b”);

Alert(typeof arguments);执行后将显示对象,表明参数是对象。然后将依次播放1、 2、 3。说明参数是调用函数的实际参数组。

复制代码,代码如下:

var Class = {

创建:function(){

return function(){

this.initialize.apply(this,arguments);

}

}

}

arguments是create返回的构造函数的实际参数组,然后在

var a = new A('helloWord!');

对于

,“ helloWord!”是实际的参数组(尽管只有一个字符串),传递给apply方法,然后传递给初始化函数,并在调用initialize时作为参数进行初始化。

老王
地址:深圳市福田区国际电子商务产业园科技楼603-604
电话:0755-83586660、0755-83583158 传真:0755-81780330
邮箱:info@qbt8.com
地址:深圳市福田区国际电子商务产业园科技楼603-604
电话:0755-83174789 传真:0755-83170936
邮箱:info@qbt8.com
地址:天河区棠安路288号天盈建博汇创意园2楼2082
电话:020-82071951、020-82070761 传真:020-82071976
邮箱:info@qbt8.com
地址:重庆南岸区上海城嘉德中心二号1001
电话:023-62625616、023-62625617 传真:023-62625618
邮箱:info@qbt8.com
地址:贵阳市金阳新区国家高新技术开发区国家数字内容产业园5楼A区508
电话:0851-84114330、0851-84114080 传真:0851-84113779
邮箱:info@qbt8.com