zoukankan      html  css  js  c++  java
  • caller.arguments.callee.eval

    ------------------------------------
    1.函数的调用方式,与this的指向问题,原型对象中的this
    2.对象创建的几种方式!
    3.str.replace
    页面初始化话之后,初始化的页面DOM元素绑定事件,通过给实例对象设置一个方法.
    this.container =$(html)
    将事件绑定在容器上由子元素触发,一个独立的功能就是一个容器
    在绑定事件的的时候,将实例化对象先保存一下,这样在事件绑定的函数中就能使用这实例化对象了
    this.container包含了功能所涉及的额所有dom节点
    $('body').append($(html));两次html会产生两个不同的jQuery对象
     
    $('.class').parent().parent()     $('.class.parent')
     
    抽取一个对象,这个对象包含的子元素具有的方法,如果设置为这个对象的原型方法,这样操作起来会特别不方便.
     
    重复使用的东西就可以转化为对象了.
     
     
    2.eval函数:在里面书写java代码字符串,可以执行
    在evel方法中没有作用域的概念,声明的变量都是全局变量,函数都是全局函数
    功能:执行一段代码,封装了一段代码,
    函数封装了一段重复执行的代码,eval函数声明的代码不能重复执行
     
    跟函数的比较:
        1.封装了一段代码,只能执行一次
        2.eval中声明的变量和函数都是全局的,没有独立作用域的概念
    用途:
        用来解析json数据
    var json1 = "[{name:"范明","age":"18"}]";
    console.log(json1);//执行结果,直接返回一个数组,对于json的容错率高
    var json2 ={"hello":"world"};
    console.log(json2)//错误
    console.log("("json2")")//添加前后的小括号    如果直接写成数组不行吗??
    在解析对象的时候,要用到{},在JS语言中即可以表示对象,又可以表示代码块,在eval中
    遇到eval中遇到{}就会把它当做语句来处理,为了解决这个问题,在解析单个对象时候
    需要在解析的同时添加前后小括号
     
    3.静态属性,实例属性
    function  Person(){}
    Person.abc=10;//改函数加一个属性 函数对象自身的属性
     
    var person = new Person();//p1是Person函数的实例
    p1.name="zhangsan";//给实例p1添加的实例属性
     
     
    4.所有函数都共有的一些静态属性
    name:获取函数的名称
    function  foo(){}
    foo.name   函数foo的函数名
    foo.length   打印函数形式参数的个数
     
    caller:表示当前函数的调用是在哪个函数内
    function f1(){
    console.log(f1.caller);//在全局作用域直接调用,结果为null
        f2();
    }
    function f2(){
        console.log(f2.caller);//f1函数,在哪个函数内部调用了f2那么输出结果就是哪个函数
    }
     
    arguments是函数内部的一个属性,保存的是实参的相关信息,是一个伪数组
    数组:通过Array构造函数创建的对象
    伪数组:不是通过Array构造函数创建的随想,可以使用for循环来进行遍历
    var  oarr ={0:"zhangsan",1:"lisi",2:''wangwu",length:3}
    获取第一个实参:arguments[0]
    获取实参的长度 arguments.length
     
     
     
    callee属性 
    function foo(){
        console.log(argument.callee);//打印的是函数体本身
    }
    使用argument.callee实现递归   ES5严格模式下,禁止使用这个对象
    "use  strict";//开启严格模式  阮一峰 javascript严格模式详解
    //严格模式 禁止给一个未声明的变量赋值   number=20;
    //严格模式下 eval具有了独立的作用域 在eval中声明的变量和函数 都是局部变量
    //禁止使用arguments.callee进行递归调用
     
    =递归=函数自己调用自己
    可能出现了死递归
     
    1. //注意递归的结束条件
    2. function fn(n){
    3. if(n==1|| n==2){
    4. return1;
    5. }
    6. return fn(n-1)+fn(n-2);
    7. }
     
    1. /*递归查找父元素*/
    2. function find(child, parent){
    3. /*由子元素查找父元素*/
    4. if(child.parentNode === parent){
    5. returntrue
    6. }
    7. /*找到了文档的最顶端*/
    8. elseif(child.parentNode ==null){
    9. returnfalse
    10. }
    11. return find(child.parentNode, parent);
    12. }
     
     
    在chrome浏览器中为了调试方便,id元素的id值就是全局变量了,直接可以使用
    this +new 
    1. //使用构造函数创建属性:默认值,传参,动态添加,混合模式
    2. //属性的取值和设置器 get set 数值判断 打折
    3. //取值设置 返回格式化的日期
    4. //日期格式转化的工具方法
    5. //共有属性 实例化后外部的人可以访问到
    6. // 私有属性
    7. functionPerson(){
    8. var name="张三";//实例化的对象 无法访问这个属性
    9. }
    10. //最小原则
    11. //this.config={}//保存当前对象中可能用到的临时变量
    指针 当我们定义一个变量的,会在内存中开辟一段区域保存这个变量的值
    实例化的本质:就是拷贝构造函数属性的过程
    属性屏蔽理论:原型中和构造函数中有相同的属性
    如果想访问原型中的属性,delete构造函数中的属性 使用Product.prototype
     
     
     
     





  • 相关阅读:
    愚公oracle数据库同步工具
    外部服务的隔离及降级
    使用redis来实现分布式锁
    php 无限极栏目 Tree 树格式 层级显示 【列表记录按顺序缩进显示】
    腾讯地图添加多marker标注样式
    MIME 视频 , 文件下载与播放权限
    php json_encode 对浮点 精度 问题 解决
    phpexcel 导入 时间格式 和 数值格式 处理
    phpexcel写入追加已有的excel文件
    php 判断字符串是否可以转 浮点型
  • 原文地址:https://www.cnblogs.com/itlyh/p/6012096.html
Copyright © 2011-2022 走看看