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

时间:2022-10-10 20:40:29

面向对象,是一种编程思想
可以添加属性(变量)和方法(函数)。
特点:
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);
JS学习之面向对象(面向对象的创建方法,new运算符的工作原理)

 

 

 

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

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

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的是非对象,返回的是创建的那个对象