zoukankan      html  css  js  c++  java
  • JavaScript函数部分

     对象:
         JavaScript的对象字面表示法允许仅仅列出对象的组成部分就能创建对象。这也是json的灵感来源。所谓的对象字面量就是包含在{}中的多组键值对。
    var stooge={
    'first_name' : 'jack' ,
    'last_name' : 'ma'
    };
         取对象内的值可以用stooge['first_name']或者是stooge.first_name。
         从undefined的对象中取值是违法的,如stooge.name.me ,此时会报TypeError错误。解决办法是用&&,stooge.name&&stooge.name.me,此时返回undefined。
         更改对象内的值用stooge.first_name='mark';,如果first_name不存在,则会向对象中添加新的属性。
         遍历对象用for或者是for  in。
    for(var name in stooge){
    alert(stooge.name);
    }
    for in的缺点是遍历对象中的属性是没有顺序的,为了有顺序的输出可以使用for
    var names=['first_name ','last_name '];
    for(var i=0;i<names.length;i++){
    alert(stooge.names[i]);
    }
         删除对象中的属性用delete。delete stooge.first_name
    原型:
         每个对象都连接到一个原型对象,并且可以从中继承属性。通过字面量创建的对象都连接到Object.prototype上。原型连接只有在检索时才有用(这个很有用,我们需要知道更改操作不会改变原型中的值),如果检索一个对象的属性,这个对象没有就会检索它指向的原型对象,直到最终的Object.prototype,最后也没有就返回undefined。
    函数:
         函数就是对象,对象的原型链终点是Object.prototype,函数的原型链终点是Function.prototype。
         函数的创建:
         每个函数在创建时会附加两个属性,一个函数的上下文,一个是函数实现的代码(函数实现的代码也被称为“调用”属性,当调用一个函数的时候可以看做是调用这个函数的调用属性)。
    var add=function(var a,var b){
    return a+b;
    };
    上面就是用字面量创建的函数。通过字面量创建的函数包括一个连接到上下文的连接(就是所谓的闭包)。
         函数的调用:
         被调用的函数除了接收声明的参数外还会接收this和arguments参数。this的值取决于调用的模式,一共有四种调用模式:方法调用、函数调用、构造器调用、apply调用。
         方法调用:
    var myObject={
    var value=0;
    add:function(i){//在这里函数被声明为方法
    return this.value+i;//这里的this就是myObject
    }
    };
    myObject.add(2);//这就是函数的方法调用。通过方法调用函数中的this就是所属对象本身。
         函数调用:(易错点在这里)
    为了说明这点,先进行如下的说明,之后再看一个例子。这里要注意的是,在进行函数调用的时候this指代的是全局的windows,这个问题的直接影响是在函数的内部函数调用时
    var i=100;
    var MyObject={
        i:10,
        out:function (value) {
            var inFun = function () {
                alert(value + this.i);
            }
            inFun();//这里是函数调用
        }
    }
    MyObject.out(10);//这里是属性(方法)调用
    上面的例子中inFun()调用时为函数调用,this指的是windows,因此this.i=100。最终的结果是110。
    为了解决上面的问题,可以用下面的方法:
    var i=100;
    var MyObject={
        i:10,
        out:function (value) {
            var that=this;//在这里将方法调用传来的this先绑定到that属性上,在下面用时就不会发生上面的问题了
            var inFun = function () {
                alert(value +that.i);
            }
            inFun();
        }
    }
    MyObject.out(10);
         构造器调用:
    我不喜欢这种方式的函数调用,对于已经熟悉java的我来说看着觉得很怪,本来将函数赋值给变量就怪了。这里就简单的说说。
    var MyOb=function(ss){
        var sta;
        this.sta=ss;
    }
    MyOb.prototype.fun= function () {
        return (this.sta);
    };
    var oo1=new MyOb('oo1');//在new的时候会去调用MyOb函数就是这里的关键,这个函数会在背后创建一个对象赋给oo1,MyOb中的this就是这个新创建的对象,也就是oo1
    var oo2=new MyOb('oo2');
    alert(oo1.fun());//返回oo1,因为每个sta都是保存在对应的对象中
    alert(oo2.fun());//返回oo2
    
      apply调用:这个调用容许我们手动的传递this。
    var MyOb=function(){
        return (this.sta);//这里的this就是app
    }
    var app={
        sta:"i am ok!"
    }
    var res = MyOb.apply(app);//在这里手动将app赋值给this
    alert(res);
    这里函数的调用并没有完,因为上面说了的除了this还有一个arguments参数。线面就看看这个参数有什么作用。
    var fun= function () {
        var i=0;
        var sum=0;
        for(i;i<arguments.length;i++){
            sum+=arguments[i];
        }
        return sum;
    }
    alert(fun(1,2,3,4,5));
    正如上面看到的,它是一个包含了传过来参数的数组(底层只是一个类数组)。
  • 相关阅读:
    [其他]将Windows Terminal添加到右键菜单
    [VS Code]在自己的Ubuntu服务器上构建VSCode Online
    [Go]goFileView-基于Golang的在线Office全家桶预览
    [Go]基于Go语言的Web路由转发,多个网站共享一个端口(新版本,支持WebSocket)
    [WSL]在Windows10子系统里安装运行桌面(xUbuntu)
    [Go]使用Golang对鸢尾花数据集进行k-means聚类
    [Python+JavaScript]JS调用摄像头并拍照,上传至tornado后端并转换为PIL的Image
    [Python]Python基于OpenCV批量提取视频中的人脸并保存
    [WSL]Windows10 Ubuntu子系统编译安装线程安全版LAMP
    [Go]基于Go语言的Web路由转发,多个网站共享一个端口(存在问题,已经抛弃,新解决方案请看新博客)
  • 原文地址:https://www.cnblogs.com/Jc-zhu/p/4960547.html
Copyright © 2011-2022 走看看