• JS学习之面向对象(面向对象的创建方法,new运算符的工作原理)


    面向对象,是一种编程思想
    可以添加属性(变量)和方法(函数)。
    特点:
    1、把功能写成一个函数
    2、函数必须在对象身上 调用 对象.方法名()
    3、对象身上的功能可以继承

    创建对象的方法
    1、 {} 字面量创建
    2、 new Object()

    3: 用构造函数创建

    4:Object.create方法创建
    创建完的对象有2个特点
    1、 可以添加属性 (属性的值为非函数的任意数据类型)
    2、 添加方法

    //第一种创建对象方法
     var obj={
             name : '小徐',
             age  : 28,
             sing : function(){
                   console.log('小徐现在在学JS的面向对象知识');
             }
          }
      console.log(obj); 
       //可以直接给对象添加属性和方法
       obj.height='163cm';
       obj.play=function(){
           console.log('我在学习');
       }
       //第二种创建对象的方法
       var obj1=new Object();
       console.log(obj1);
       obj1.name='jiajia';
       obj1.work=function(){
            console.log("他是个苦逼的程序员");
       }

    // 用构造函数创建对象
    function M (name){ this.name = name; } var obj3=new M('jiajia');
    // 用Object.create方法创建对象

    var p ={name:'jiajia'} var obj4=Object.create(p); console.log(obj4);

    new   一元运算符,后面只能跟函数,用来调用函数

    用new 调用函数的执行过程
    1、自动创建一个空对象
    2、把函数内部的this指向创建的这个对象
    3、在函数执行完之后自动返回创建的那个对象,即使函数里面没有return
    4、 函数里有return
          1)return的是对象,返回的是这个对象
          2)return的是非对象,返回的是那个创建的对象

    注意:1、用new 调用的函数,返回的永远是一个对象
              2、使用new 调用的函数就是一个用来创建对象的函数(构造函数)

     function   test(){
         console.log(this);
     }
          
     test(); // window  函数是window身上的一个方法,所以this 指向的是window
     new test(); // {} 用new 调用函数创建了一个空对象并且把this指向了该对象
        
     var res1=test();
     var res2=new test();
     console.log(res1); // undefined 因为在函数声明的时候并没有 return 
     console.log(res2);         // { }  一个空对象
     /*
     new 调用函数背后实现的原理
         var new2=function(func){
         var obj=Object.create(func.prototype);  //创建一个空对象,并且继承了传入参数的原型
         var k=func.call(obj); // 改变this指向
         if(typeof k === 'object'){
            return k;  // 如果传入的参数是个对象,返回该对象
           }else{
            return obj; // 如果传入的是个非对象,返回空间的那个空对象
           }
         }
    // new test() ,这个new的调用的背后工作原理就是 new2(test)这个实现的步骤
    */ function test1(){ return [1,2,3]; } var res3=test1(); var res4=new test1(); console.log(res3); // [1,2,3] console.log(res4); // [1,2,3] function test1(){ return 1; } var res3=test1(); var res4=new test1(); console.log(res3); // 1 console.log(res4); // { } 用new 调用的函数return的是非对象,返回的是创建的那个对象
  • 相关阅读:
    中国移动校园WLAN客户端及使用方法
    Win7 开启upnp服务,直接在网络中设置连接路由设备
    转载:迷你云 – 搭建自己的本地多人团队Dropbox 服务
    JLINK V8固件烧录指导
    实验室网站试运营期间的信息管理
    并非如你想象的那般强大,带你重新认识3D打印
    转:技术宅逆天了!如何从按键音中听出周鸿祎的手机号码
    南大学生破译周鸿祎电话获得互联网大佬青睐
    E430 加装固态硬盘(SSD)参考
    iptables_cacti_nagios
  • 原文地址:https://www.cnblogs.com/xubj/p/9879439.html
Copyright © 2020-2023  润新知