JS的中的对象理解

MMP我才发现ecplise的mar版本居然没有tomcat,我自己手动给加了一个tomcat,我靠~
JS的函数相当于是一个对象,但是要具体怎么理解呢?

<script type="text/javascript">
    function say(name,age){
        alert(name+"今年"+age+"岁了");
    }
    say("张三",12);
    //也可以这么写,这里我们new了一个方法对象,前面可以跟参数,后面跟的是方法体
    var sayfunc = new Function("name","age","alert(name+'今年'+age+'岁了')");
    sayfunc("李四",15);

    alert("方法参数的个数:"+sayfunc.length);
    //显示方法的源码,但是function后面跟的是anonymous,这个也是表示匿名的意思
    //valueOf():返回最适合该对象类型的原始值;
    //toString(): 将该对象的原始值以字符串形式返回。
    alert(sayfunc.toString());
    alert(sayfunc.valueOf());
</script>

以上就是把JS中的函数作为一个对象来使用,但是我总感觉似曾相识,貌似在哪里见过
下面这个是声明一个全局变量,然后在函数中调用

<script type="text/javascript">
    var a = 22;
    function func(){
        //这个a是全局变量,所以我们可以读取到
        alert(a);
    }
    //这个就相当于在这里调用了func函数,等于说再js中调用自己函数
    func();
    //页面会输出两个22
</script>
<script type="text/javascript">
    function func2(){
        //这个a相当于是局部变量
        var a = 23;
        //这个时候b就是全局变量
        b = 23
    }
    //所以就是在方法外调用一个局部变量
    func2();
    //这个时候的a是无法输出的,因为是一个局部变量
    //alert(a);
    //这个时候b就可以输出了
    alert(b);
</script>

那么如何在函数中读取私有的变量也就是局部变量

<script type="text/javascript">
    function func(){
        //这是一个私有的变量
        var a = 25;
        //这个可以理解成为一个构造函数
        function func2(){
            return a;
        }
        return func2;
    }
    //这样就调用了私有的变量,原理就是闭包,闭包的定义就是“定义在一个函数内部的函数”,闭包的作用一个是可以读取到函数中的变量,一个就是让这些变量始终保持在内存中。由于闭包使得函数中的变量都存在于内存中,所以内存消耗很大,因此我们不要滥用闭包
    var result = func();
    alert(result());
</script>

更加高级一点的应用:

<script type="text/javascript">
    //定义一个全局变量name
    var name = "the window";
    //定义了一个object对象
    var object={
            name:"my name",
            age:function func(){
                return function(){
                    return this.name;
                }
            }
    };
    alert(object.name);
    alert(object.age()());
</script>

这是第一个alert的:
这个是第一个alert
这是第二个alert的:
这是第二个alert的:
但是我也是一脸懵逼。。。

JS中的创建对象

<script type="text/javascript">
    //js的初始化器创键对象
    var marry = {
            name :"qxf",
            age: 2,
            shout:function(){
                alert("我是"+this.name+"今年"+this.age);
            },
            action:function(){
                alert("会吃");
            }
    };
    alert(marry.name);
    alert(marry.age);
    marry.shout();
    marry.action();
</script>

构造方法创建js对象

<script type="text/javascript">
    //使用构造方法来创建对象
    function Dog(name,age){
        this.name = name;
        this.age = age;
        this.shout = function(){
            alert("我是"+this.name+"今年"+this.age);
        };
        this.action = function(){
            alert("会吃");
        };
    }
    var jack = new Dog("jack",1);
    alert(jack.name);
</script>

对象属性的定义:
分为三种:对象属性,私有属性,类属性

<script type="text/javascript">
    function c(){
        this.obj = "对象属性";
        c.prototype.obj2 = "对象属性2";
        var privatePro = "私有属性";
    }
        c.ClassPro = "类属性";//类似于static变量

        alert(c.ClassPro);
        var c2 = new c();
        alert(c2.obj);
        alert(c2.obj2);
        //私有属性只有通过闭包才能够拿出来
</script>

对象方法:
三种:私有方法,对象方法,类方法:

<script type="text/javascript">
    function C(){
        var privatemethod = function(){
            alert("私有方法");
        };
        //调用内部的私有方法
        privatemethod();
        this.objFun  = function(){
            alert("对象方法");
        };
        C.prototype.objFun2 = function(){
            alert("对象方法2");
        }
    }

    C.classFun = function(){
        alert("类方法");
    };

    C.classFun();
    var c = new C();
    c.objFun();
    c.objFun2();

</script>

js中的继承

<script type="text/javascript">
    function Animal(name,age){
        this.name = name;
        this.age = age;
        this.shout = function(){
            alert("我是"+this.name+"今年"+this.age);
        };
        this.action = function(){
            alert("会吃");
        };
    }
    //继承
    function Dog(name,age){
        //将Animal的age和name给Dog,这种继承只是继承了属性和方法,但是真正的类型并没有改变
        Animal.apply(this,[name,age]);
    }
    var jack = new Dog("jack",1);
    alert(jack.name);
    alert(jack.age);
    jack.shout();
    jack.action();

</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值