felayman——ecmascript—函数_对象_简单了解

  /*
        核心内容
            1.语法
            2.类型
            3.语句
            4.关键字
            5.保留字
            6.对象
            7.函数
    一、ecmascript5的关键字
    break  do  instanceof   typeof case else new
    var catch finally return  void continue for switch
    while debugger function   this with default if 
    throw delete in try
    二、ecmascript5的保留字
    abstract enum int short boolean export interface
    static char extends long  super char final native
    synchronized  class float package throws const goto 
    private  transient debugger implements protected volatile
    double import public 
   三、变量
        -松散变量(可以存放任何类型数据)
        -全局变量
        -局部变量
        -变量作用域
   */
   //全局变量
  function print(str) {
      document.writeln(str + '<hr/>');
  }
  var whole_var = 'felayman'; //全局变量
  function getVar() {
      var part_var = 'hello,csdn';
      print(whole_var); //在函数内获取全局变量
  }
   //print(part_var);//访问局部变量,这里访问不到
  getVar(); //访问局部变量

  function get_var() {
      message = 'felay';
  }
   //print(message);//在这里直接这样使用,会出现错误
  /*
        这样是访问不到message变量的。按照标准来将的化
        按照常理来说,一般会出现undefined字样,但是很
        可惜,这里不会有任何内容,因为js引擎并没有在全
        局作用域中查找到message的定义,因为此时的函数
        在位调用之前,其属性(数据)是对外屏蔽的,而只有
        在函数在被调用后,我们才能去访问函数内部的数据
        这就跟OOP语言中,只有一个类被实例化后,我们才能
        去访问该对象的属性一样。,因此上述在直接打印message
        的时候,是无法获取到任何内容的,要能够获取到message的
        化,我们就必须将函数加载到内存中,这样全局对象window才
        能将message保存到它的作用域中。因此,下面的方式我们
        是可以获取到message的值的,在标准的JSLint的检查下
        会出现如下提示:
        Missing 'use strict' statement
    */
  get_var();
  print(message);

  function window_var() {
      window.name = 'felayman';
  }
  window_var();
  print(name);
    /*
        数据类型
            1.undefined
            2.null
            3.boolean
            4.number
            5.string
            6.object
            7.function
    */
    //1.undefined  就是定义一个变量但是没有未其初始化
    var undefined_var ;//该变量属于未定义变量
    if(typeof undefined_var=="undefine"){
            print(undefined_var);
    }
    print('==============undefined==================');
    //说明,我们声明了一个变量,但是没有初始化,就属于undefined,在看看下面
    print(undefined == undefined);//true
    print(undefined =='undefined');//false
    print('undefined'==undefined);//false
    print('undefined'=='undefined');//true
    print('undefined'==='undefined');//true
    print(typeof undefined);//undefined
    print(typeof 'undefined');//string
    //2.boolean
    print('================boolean=========================');
    print(true);//true
    print(true==true);//true
    print(true===true);//true
    print(true=='true');//false
    print(1=='1');//true
    print(1==='1');//true
    print(typeof true);//bolean
    print('=================string============================');
    print('felayman');//felayman
    print(typeof 'felayman');//string
    print('=================null============================');
    print(null);//null
    print(typeof null);//object  说明null本身是对象
    print('=================number============================');
    print(100);//100
    print(typeof 100);//number
    print(100+'hello');//100hello
    print('=================object===============================');
    var obj1={};
    print(obj1);//object
    var obj2 = new Object;
    print(obj2);//object
    var obj3 = new Object();
    print(obj3);//object
    print(typeof obj1);//object
    print('=================function===============================');
    var obj4 = function(){};
    print(obj4);//function
    var obj5 = new Function();
    print(obj5);//function
    print(typeof obj5);//function
    /*
        上述是对ecmascript的数据类型的简单描述,下面是对object和function的深入了解
    */
    print('=======================深入对象====================================');
    /*
        其实ecmascript中是不怎么区分函数和对象的,因为无论对象还是函数,都是对数据的封装,说白了,
        都是数据的一种载体。,只是一般的函数所作出的逻辑处理要不对象要多和复杂。
        一般情况下,我们在ecmascript中创建对象有两个方法,一种是通过构造器来进行创建,一种是字面量
        的方式来创建,由于JSON的流行,我们更喜欢和推荐使用字面量的方式来创建一个对象,如下:
    */
    //构造器来创建对象
    var user = new Object();//后面的括号可有可无//这里并没有为user对象添加属性
    print(typeof user );//测试user确实是对象类型
    //字面量来创建对象
    var person = {};//这里并没有为person对象添加属性
    print(typeof person);//测试person确实是对象类型
    /*
        有人说还有第三章方法,如下
    */
    function Student(){
        
    };
    print(typeof Student);
    /*
        经过测试,并非object,而是function,也因此,在这里说明一下,ecmascript虽然使用了函数和对象,
        但是不同其他语言的函数,在ecmascript中的函数,就类似于其他OOP语言中的类,属于模板,二对象则
        属于函数实例,因此,对于我们的对象,跟普通的函数是一样的,不存在使用new关键字,因此只存在一个实例
        而函数则可以有多个实例,后面会仔细说道,因此目前在ecmascript中只存在上述的两种方法来创建对象
        既然是对象,肯定有成员属性和成员方法,但是我们创建出来的对象并么有显示的属性和方法,但是在对象被
        创建后,确实有它的属性和方法的。当我们使用了new Object()方法创建的对象,都会有下面的属性和方法的
    */
    //1.Constructor 这是一个成员函数(构造函数),保存当前被创建的对象的引用
    print(typeof user);//object
    print(typeof user.constructor());//object 
    print(typeof person);//object
    print(typeof person.constructor());//object
    print(user == user.constructor());
    print(person == person.constructor());
    /*
        这里我们可以看出一些端倪,即user和user.constructor()并不是持有同一个引用。我们使用的user属于内存中的
        一个实例,但是这里的user.constructor()属于对user对象的引用。,下面我们为我们创建的属性设置属性和方法
    */
    user.name = 'felayman1';
    user.age =  22;
    user.getInfo = function(){
        return ('姓名:'+this.name+',年龄'+this.age);
    }
    
    print(user.getInfo());
    //或者
    user.getInfoParam = function(name,age){
        return ('姓名:'+name+',年龄'+age);
    }
    print(user.getInfoParam('felay',22));
    //再或者
    user.get = function(name,age){
        return ('姓名:'+this.name+',年龄'+this.age);//此时的参数是无效的
    }
    print(user.get('felayman2',23));
    /*
        上述的例子中可以看出,我们虽然可以为对象设置属性和方法,但是这样的化,代码显示的并不是很优雅,不符合封装效果,在这里我们使用
        了this关键字,通过上述例子知道,this指向的是当前的对象(其实可以切换上下文对象的使用call和apply),因此我们不推荐使用这样
        的写法,反而是使用字面量的写更加符合面向对象的形式,如下
    */
    var object = {
        'name':'felayman',
        'age':22,
        'job':'student',
         'getinfo' :function(){
        return ('name:'+this.name+',age:'+this.age+'job:'+this.job);
    }
};
print(object.getinfo());
/*
    上述的写法是不是看起来更加面向对象,封装性也特别好,因此,我们强力推荐使用这种写法.至于对象的其他复杂的情况,比如:
    作用域、原型链、闭包等复杂的情况,我会在学习对象和函数的详细关系后进行解释。,下面我先对于函数的理解,创建一个函数
    也有三种方法
*/
    //1.函数声明的方式
    function func1(){};
    print(typeof func1);//function
    //2.表达式函数
    var func2 = function(){};//function
    print(typeof func2);//function
    var func3 = new Function();
    print(typeof func3);//function
    /*
        函数定义或者声明后,我们必须进行显示的调用才会去执行函数内部的代码,当然我们定义的三个函数都没有写具体的代码,下面就将
        三个函数进行改
    */
    function func_name1(name,age){
        return '姓名:'+name+',年龄:'+age;
    }
   var func_name2 =  function (name,age,job){
        return '姓名:'+name+',年龄'+age+',职业:'+job;
    }
    var func_name3 =  new Function("name","age","job","return '姓名:'+name+',年龄'+age+',职业:'+job;");
    print(func_name1('felayman',22));
    print(func_name2('felayman',22,'学生'));
    print(func_name3('felayman1',23,'学生'));
    /*
        上述的三种方法就是函数的三种使用方法,其中我们一般在初学的时候推荐前两种写法,但是当我们对scmascript了解比较深入的时候
        我们强烈推荐学习第三种方式,对于后面的学习很有帮助.对于函数,它的参数非常重要,因为虽然在scmascript中不存在函数的重载,
        但是却有可变参数一说,如下:
    */
    function addAll(num1,num2,num3){
        print(arguments.length);
    };
    addAll();//0
    addAll(100);//1
    addAll(100,200);//2
    /*
        因此,我们可以通过arguments这个参数对象来定制我们所需要的参数
    */















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值