前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >javascript面向对象3

javascript面向对象3

作者头像
py3study
发布2020-01-17 11:13:01
2450
发布2020-01-17 11:13:01
举报
文章被收录于专栏:python3python3

函数

创建函数:

function f(x){…..};

var f = function(x){…};

上面两种形式都可以创建名为f()的函数,不过后一种形式可以创建匿名函数。

函数定义时可以设置参数。如果传给函数的参数个数不够,则从最左边起依次对应,其余的用undefined赋值,如果传给函数的参数多于函数定义参数的个数,则多出的参数被忽略。

JS代码:(见附件test1.html)

function myprint(s1,s2,s3){

alert(s1 + "_" + s2 + "_" + s3);

}

//undefined_undefined_undefined

myprint();

//String1_String2_undefined

myprint("String1","String2");

//String1_String2_String3

myprint("String1","String2","String3","String4");

因此,对于定义好的函数,我们不能指望调用者将所有的参数全部传进来,对于那些必须用到的参数应该在函数体中加以检测(用!操作符),或者设置默认值然后同参数进行或(||)操作来取得参数。

JS代码:(见附件test2.html)

function myprint(s1,person){

//默认person对象

var defaultPerson = {

"name":"name1",

"age":18,

"sex":"female"

};

//s1不允许为空

if (!s1)

{

alert("s1 must be input");

return false;

}

//接受person对象

person = person || defaultPerson;

alert(s1 + "_" + person.name + ":" + person.age + ":" + person.sex);

};

//s1 must be input

myprint();

//s1_name:18:female

myprint("s1");

//s1_wangsy:31:male

myprint("s1",{"name":"wangsy","age":31,"sex":"male"});

函数的armuments属性

在每一个函数体的内部,都有一个arguments标识符。这个标识符代表了一个Arguments对象,Arguments对象非常类似于Array(数组)对象,比如都有length属性,访问它的值用”[]”操作符,利用索引来访问参数值,但是,二者是完全不同的东西,仅仅是表面上有共同点而已(比如说修改Arguments对象的length属性并不会改变它的长度)。

JS代码:(见附件test3.html)

function myargs(){

alert(arguments.length);

alert(arguments[0]);

}

//0 undefined

myargs();

//2 1

myargs("1",[1,2]);

Arguments对象有一个callee属性,标示了当前Arguments对象所在的方法,可以使用它来实现匿名函数的内部递归调用。

JS代码:(见附件test4.html)

function (x){

if (x <= 1) return 1;

return x*Arguments.callee(x-1);

}

method--方法

方法就是函数,我们知道,每一个对象都包含0个或多个属性,属性可以是任意类型,当然也包括对象。函数本身就是一种对象,因此我们完全可以把一个函数放到一个对象里面。此时,这个函数就成了对象的一个方法。此后如果要使用该方法,则可以通过对象名利用”.”操作符来实现。

JS代码:(见附件test5.html)

var obj = {f0:function(){alert("f0");}};

function f1(){

alert("f1");

}

//为对象添加方法

obj.f1 = f1;

//f0 f0是obj的方法

obj.f0();

//f1 f1是obj的方法

obj.f1();

//f1 f1同时又是一个函数,可以直接调用

f1();

//缺少对象 仅仅是obj的方法,只能通过对象调用

f0();

方法的调用需要对象的支持,那么在方法中如何获取对象的属性呢?this!this关键字我们已经很熟悉了,在js方法中,我们可以用this来取得对方法调用者(对象)的引用,从而获取方法调用者的各种属性。

JS代码:(见附件test6.html)

var obj = {"name":"NAME","sex":"female"};

//为对象添加方法

obj.print = function(){

alert(this.name + "_" + this["sex"]);

};

//NAME_female

obj.print();

obj.sex = "male";

//NAME_male

obj.print();

下面来一个更加面向对象的例子:

JS代码:(见附件test7.html)

var person = {

name:"defaultname",

setName:function(s){

this.name = s;

},

"printName":function(){

alert(this.name);

}

};

//defaultname

person.printName();

person.setName("newName");

//newName

person.printName();

在上面的例子中,完全可以用person.name = …来直接改变person的name属性。另一种改变person属性的方法就是:定义一个function,接收两个参数,一个是person,一个是name的值,看起来像是这样:changeName()person,”newName”),哪种方法好呢?很明显,例子中的方法更形象,更直观一些,而且好象有了那么一点面向对象的影子。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档