zoukankan      html  css  js  c++  java
  • js对象学习笔记Function类型和对象

    1.构造函数

    任何函数,只要通过new操作符来调用,那它就可以作为构造函数;而任何函数,入股不通过new操作符来调用,那它跟普通的函数一样。

    function Person(name){
    this.name = name;
    this.sayName = function(){
    alert(this.name);
    }
    }

    //当作构造函数
    var person = new Person("zhangsan");
    person.sayName(); //zhangsan

    //当作普通函数
    Person("zhangsan"); //在全局作用域中调用一个函数时,this对象总是指向Global对象(在浏览器中就是window对象)
    window.sayName(); //zhangsan

     2.函数的内部属性:arguments和this

       arguments:数组类型,包含传入函数中的所有参数。arguments含一个特殊属性callee,该属性是一个指针,指向拥有这个arguments对象的函数,如下面例子:

    function factorial(num){
    if(num<=1){
    return 1;
    }else{
    return num* factorial(num-1);
    }
    }

    //使用arguments的callee属性
    function factorial(num){
    if(num<=1){
    return 1;
    }else{
    return num* arguments.callee(num-1); //arguments.callee 等效于拥有arguments的函数factorial
    }
    }

       this:指向函数执行时所处的作用域,参考如下例子:

    window.color = "red";
    var o = {color:"blue"};

    function sayColor(){ //在全局作用域中定义
    alert(this.color);
    }
    sayColor(); //red,因为在全局作用域中使用sayColor(),所以this指向全局对象window

    //以下方法还可以参考使用apply()和call()来限定函数执行的作用域
    o.sayColor = sayColor; //把全局函数sayColor赋值给对象o
    o.sayColor(); //blue,因为在o对象中使用sayColor,所以this指向o

    3.每个函数都包含的两个非继承方法:apply()和call()

    先看看这两个方法是使用例子:

    用途一:传递参数
    function sum(a,b){
    return a+b;
    }
    //apply使用
    function callSum1(num1,num2){
    return sum.apply(this,arguments); //arguments包含传入函数的参数
    }
    function callSum2(num1,num2){
    return sum.apply(this,[num1,num2]);
    }

    //call使用,apply传入的参数是一个数组,而call则是一个个具体参数
    function callSum3(num1,num2){
    return sum.call(this,num1,num2);
    }

    用途二:扩充函数运行的作用域
    call用例(apply类似)
    window.color = "red";
    var o = {color:"blue"};
    function sayColor(){
    alert(this.color);
    }
    sayColor(); //red
    sayColor.call(this); //red
    sayColor.call(window); //red
    sayColor.call(o); //blue,因为作用域在o上






  • 相关阅读:
    我劝你不要记账
    富人不存钱
    1w+的心路历程
    简历这么写才对!
    Android 开发凉了吗!
    三个思维转变
    说一说赚钱
    【原】Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法(Matt Galloway著)读书笔记(二)
    【原】Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法(Matt Galloway著)读书笔记(一)
    【原】iOS开发进阶(唐巧)读书笔记(二)
  • 原文地址:https://www.cnblogs.com/keenhome/p/2336749.html
Copyright © 2011-2022 走看看