js的类、对象与函数,个人总结

本文详细介绍了JavaScript中函数的定义及使用方式,包括参数处理、重载模拟等,并深入探讨了基于原型的类定义方法,展示了如何实现类的实例化、静态属性与方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于函数

  1. 在同一个js文件中,如果有两个相同的函数,则下面的函数起作用
  2. 函数参数:对同一个函数,即使不显示的声明其参数,在使用该函数时既可以使用带参数的函数形式,也可以使用不带参数的函数形式

    通过使用arguments[0]就可以访问函数的第一个参数,其他依次类推

    用arguments对象判断传递给函数的参数个数,即可模拟函数重载
    函数名.length可以用来获取该函数的参数个数
  3. 函数定义方式:
    3.1. 正常的定义
    function functionName([arguments]){

         Javascript statements

         [return expression]

    }

    3.2. 匿名函数
    var func2 = function(…){…};

    3.3. 匿名函数加默认参数
    var iii = (function(a,b){return a+b;})(1,2);// 后面的括号(1,2)表示创建完后立即进行这个函数调用

 

关于类

      JavaScript中的对象系统是基于原型的,这也意味着它与普通的面向对象语言,比如Java和C++不一样。基于原型意味着,建立新类的时候,是新 建一个包含指定的属性和方法的构造函数,而并不是不是新建立一个类类型。this关键字用于指代那个类生成的实例。可以这样理解this对象,它本质上就 是一个包含成员入口的属性列表。

 

类的定义方式:

  1. 通过构造函数来模拟类
    var Person=function(name){//这是一个构造函数
            this.name=name;//成员变量,使用this标明是共有变量,如果是var name就是私有变量
    }
    因为函数有多种写法,所以上面还可以写成:function Person(name)
    Person.prototype.say=function(){//成员函数的定义
            alert('hi,我是'+this.name);
    }
    var wanz=new Person('丸子');//实例化对象
    wanz.say();//类的实例访问成员函数,输出:hi,我是丸子
    var rekey=new Person('rekey,丸子的师傅');//另一个实例
    rekey.say();//hi,我是rekey,丸子的师傅
  2. 类的静态属性和方法
    var Person=function(name){
            this.name=name;
    }
    Person.prototype.say=function(){
            alert('hi,我是'+this.name);
    }
    Person.color='yellow';//静态属性的添加如此简单
    alert(Person.color);
    var wanz=new Person('丸子');
    wanz.say();
    alert(wanz.color);//undefined,静态属性color并不会被实例继承


    类中静态属性和方法的定义 (http://blog.youkuaiyun.com/sevenzhang/archive/2007/03/16/1531518.aspx

    目前被认可的有两种方法:(同样用上例作说明)
    1.采用上述A.value定义静态属性,采用A.func定义静态方法
    2.采用上述A.prototype.value定义静态属性,采用A.prototype.func定义静态方法
    在一些文献中,
    称A.value定义的属性为static class variables
    称A.func定义的方法为static class functions
    称A.prototype.value定义的属性为shared member variables
    称A.prototype.value定义的方法为shared member functions

    采用方法1和2在一般情况下是一样的,但是还是有一定的差别,举例说明如下:

    (1).类A的实例x并没有属性value2和方法func2,也就是说x.value2和x.func2都不存在,只存在A.value2和A.func2
    (2). x.value3改变的时候 A.prototype.value3不改变,但是 A.prototype.value3改变的时候 x.value3将随之改变

Note:this与prototype定义的命名冲突的情况

事实上,编译器尝试先搜索this定义的属性或者方法,当找不到的时候才在prototype中进行寻找。

 

关于对象:http://www.ccvita.com/94.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值