• 7天入门JavaScript,第五天


    对象
      JavaScript 中除了数字,字符串,布尔值,null和undefined之外都是对象。

    对象分类
      内置对象:数组 ,函数 , 日期 , 正则表达式...
      宿主对象: window ...document...(也可以看作内置对象)
      自定义对象,

    创建对象
      对象字面量方式:
        var object = {id:1,name:'xxx',walk:function(){}};
      new 构造函数
        var object = new Object();
        自定义的构造函数,它的原型是Object
        function fun() {

        }
        //fun.prototype = Function;
        alert(typeof fun.prototype); // object

      Object.create();

    -------------------------------------------

      function fun() {
    
      }
    
      alert(fun); // 这个fun指的是 fun 对应的function对象
      alert(fun()); // 这个 fun() 只得是调用fun之后的返回值
      alert(new fun()); //这个是调用fun构造函数 返回fun构造函数创建的对象
    
      function fun() {
        age = true;  // 如果不加this,它就是全局的 // 如果后面声明了var age 那这个就是局部变量了,因为函数的作用域会将所有var"提前"
        this.age = "fun";
        //var age = 123;
      }
      alert(new fun().age);    
      alert(age);

    ---------------------------------------------------------------------------------

    prototype  
      function fun() {
      }
      上面这段代码 等同于 var fun = new Function();  fun.prototype = new Object(); (prototype 是function对象的属性,不是自定义函数创建的对象的属性)
      这句话,本质是创建了一个fun的function对象。就像类加载之后创建了这个类的class对象一样。这里的function对象等同与class对象。
      原型是fun的function对象的一个属性。所以所有的xxx产生的对象都出自同一个function对象,那么也就共享同一个prototype属性。
     
      如果不用原型会有什么问题?
      每一次创建一个对象,如 var f1 = new fun(); var f2 = new fun(); fun里面的字面量,都会重新计算(重新构造对象,因为在javascript里面方法就是对象)。

     方法是可以重用的,但是如果有成员变量那么会造成资源共享问题,只要我们不声明成员变量那么资源共享问题是可以避免的。
      用原型的目的: 把函数当方法,仅仅当方法用, 不当对象用。因为方法没有成员变量一说,只有对象才有成员变量。
     
      原型链上的属性不允许赋值。,只有通过查询属性才会体会到继承的存在

    fun2.prototype.birth = "abc";
        alert(new fun2().birth);
        var fo = new fun2();
        alert(fo.birth);
        fo.birth = "xxxxx";  // 不能赋值给原型链上的birth属性,
        var fo2 = new fun2();
        alert(fo2.birth); // abc



    ---------------------------------------------------------------------------------
      JSON.stringify(o); 将o对象转为string类型
      JSON.parse(""); 将string转称对象类型

    ---------------------------------------------------------------------------------

      (function() {
            alert("hi");
      }());
      匿名函数,外面一定要包一层括号。
    test();
      function test() {
          var xxx = function() {  // 这种方式不会报错。 赋值语句,后面的function会执行
            alert("hello");     
        }();
            function() {  //声明语句
            alert("www");    
        }();
      }



    闭包
      原理,每次调用JavaScript函数时,都会为之创建一个新的对象用来保存局部变量,把这个局部变量保存到作用域链中。
      如果有嵌套函数并在这个作用域链中,这个嵌套函数可以访问那个保存局部变量的对象。

      var increment = (
          function() {
            var count = 0;
            return function() {
                return ++count;
            }
         // 理解为在这里执行的嵌套函数 }() );
    for(var i=0;i<10;i++) { document.writeln(increment()); // 理解为,这个嵌套函数在声明之后下一行执行。 };
  • 相关阅读:
    IDEA一些介绍
    win32控制台程序使用CfileDialog进行文件读取
    判断GPS、网络是否开启
    使用高德地图SDK获取定位信息
    #子线程消息被阻挡
    strlen与sizeof
    C++中路径操作
    20155235 《网络攻防》 实验一 逆向及Bof基础实践说明
    20155235 《信息安全系统设计基础》课程总结
    2017-2018-1 20155235 《信息安全系统设计基础》第十四周学习总结
  • 原文地址:https://www.cnblogs.com/shouwangzhe-/p/3945088.html
Copyright © 2020-2023  润新知