笔记(四)--arguments

2017-02-24  本文已影响0人  believedream

1.arguments对象介绍

arguments 凡是函数调用,默认含有一个 arguments 对象
,可以将其看成一个‘数组’。里面存储调用时传入的所有参数,
可以使用数组的索引访问这些参数。

演示代码:

function sum () {
                // 所有的参数都会存储到 arguments 中
                var sum = 0;
                for ( var i = 0; i < arguments.length; i++ ) {
                    sum += arguments[ i ];
                }
                return sum;

注意:函数名.length,即函数的length属性,表示 定义函数时,参数的个数。

2.函数的引用(callee) 与 (caller)

js 中函数也是对象

2.1 callee 在函数内部,他表示 当前函数的引用。
2.2 caller caller 表示调用函数的

调用函数方法:

   arguments.callee:
   //实现递归调用
    function fn() {
       arguments.callee();  // 使用 callee 来递归
   }
   fn();
   //为什么使用 arguments.callee 调用递归呢
   
   // js 是一个弱类型的语言, 可以随意赋值
   
   function f() {
       console.log( 'Hello JS' );
   }

   f = 0;  // 赋值

   console.log( f );
   
   
   // /*2. caller 拜师调用函数*/
   // 在函数 f1 中 调用 函数 f2

   // function f1 () {
   //  f2();
   // }
   
   // f1();
   // f1 就是称为调用者. 调用的发起人.
   // f2 就是被调用者

   // caller 就是在被调用函数中, 获得调用函数的引用

   // 语法: 函数名.caller
   function f2 () {
       console.log( f2.caller );//指的是调用者是谁,这里指的是 itcast
   }

   function itcast() {
       f2();   
   }

   itcast();
   

3.eval()函数

功能:动态的执行代码

eval 函数与 Function 功能类似。
eval 可以直接将字符串作为代码来执行

// 可以直接调用 eval 函数, 来实现字符串代码
    eval( 'var num = 123;' );
    eval( 'console.log( num );' );

    alert( num );

3.1 function 与 eval 的区别

在 eval 函数中, 使用字符串声明的变量, 在 eval 函数外面可以立即使用

Function 是用来生成函数中的, 所以如果要执行, 需要调用;

如果函数要立马执行


    //      (function () { 
    //          alert ( '立即执行函数' ); 
    //       })();
    //       // 又称作 自调用函数

4、json对象的介绍

//  json 格式( 严格的国际通用数据表示协议, 结构 )

//  在 js 中使用的 json 对象, 相对较松散

// json 格式 有两种结构

//  1: {}

//  2: []

// 注意: json 格式中, 键名也必须使用双引号括起来.

4.1将字符串变成对象, 有三种做法

var data = '[ { "name": "张三", "age": 19, "gender": "男"}, { "name": "李四", "age": 18, "gender": "女"} ]';
    // 1. eval 做法
    var o1 = eval( "(" + data + ")" );   // 注意一个习惯. 就是数据两端一般加上圆括号为好

    // 2. Function 做法
    var o2 = (new Function( 'return ' + data ))();

    // 3. 使用 ES5 中引入的标准处理 JSON 的语法
    // JSON.parse(  )
    // 注意: 字符串必须是严格是 json 格式
    var o3 = JSON.parse( data );
    
    将数组转化成 字符串
    var arr = [1,2,3, { a : 1 } ];
    JSON.stringify( arr );
    
    
    字符串解析成 JSON
    var str = '[1,2,3,{"a":1}]';
    JSON.parse( str );

5.instanceof 用法

<script>
    // instanceof 语法
    //  boolean 对象 instanceof 构造函数
    // 判断该对象是否为 构造函数 的 实例   错误

    function Person () {}

    var p1 = new Person();      // 按照原有的原型结构来创建
                                // p1 -> 原来的 Person.prototype -> Object.prototype -> null

    // 设置原型
    Person.prototype = {}; 

    // var p1 = new Person();   // p1 -> 新的 Person.prototype. 即 {} -> Object.prototype -> null

    console.log( p1 instanceof Person );   // 就在判断 {} 是否在 p1 的原型链上

    // 判断 构造函数的 原型属性 是否在对象的原型链上

    

</script>

6.Object.protype_proto

09-完整的原型链结构(包含对象与函数).png
上一篇 下一篇

猜你喜欢

热点阅读