面向对象
 面向对象
    1.什么是对象?
    对象概念:具有属性和方法,特指的某一个事物。
     * 没有对象怎么办?new一个
    * 所有的实例对象都有一个对应的构造函数(包括DOM实例对象)
     一般情况下,真正的数据存储在实例对象中,而不是构造函数。
     对象的创建:方式三种
     * 1.调用系统的构造函数创建对象
     * //第一种
    var stu=new Object();
    stu.name="小白";
    stu.age=18;
    stu.eat=function(){
        console.log("我喜欢。。。");
    }
    console.log(stu.name);
    console.log(stu.age);
     * 2.调用自定义构造函数创建对象
    function student(age,name,sex){
        this.name=name;
        this.age=age;
        this.sex=sex;
        this.sayhi=function(){
            console.log("我叫"+this.name+",我今年:"+this.age);
        };
    };
 //创建学生对象
    var stu=new student(12,"小白","男");
    stu.sayhi();
     * 3.使用字面量方式创建对象
     var obj={
         name: "小白",
         age: 18,
         sex: "男",
         sayHello: function () {
             console.log("我是" + this.name + "我是:" + this.sex + "人");
         }
     }
    var obj = {};
    obj.name = '张三';
    obj.age = 12;
    // 工厂(用来生产实例对象)
    function factory(name,age){
        // var obj = new Object();
        // var obj = new Object;//如果构造函数不需要传递参数,那么实例化时可以省略括号
        var obj = {};
        obj.name = name;
        obj.age = age;
        return obj;
    }
    var o1 = factory('tom',12);
    var o2 = factory('jerry',13);
    console.log(o1 == o2);//false
   2. 对象实例化本质:
  1、浏览器根据构造函数在内存中开辟一块内存
   2、浏览器会给上面产生的内存起一个名字this(本质上就是内存地址)
   3、通过this给这块内存添加数据
   4、把this返回给一个变量
 3. 构造函数的返回值问题:
         1、默认情况下构造函数的返回值是this,
          2、如果给构造函数显示的返回一个基本类型的数据,那么和不返回的效果一样
   3、如果给构造函数显示的返回一个引用类型,那么就以此为准,就不会返回默认                        的this
4.原型
       1.  原型prototype
       原型prototype是构造函数的属性,本质上是对象(可以理解成Object的实     例对象:new Object()或者{})
      prototype的主要作用:1、数据共享(实例对象共享数据);2、实现继承
      原型中的所有数据是被所有的实例对象共享的、
      2、原型链
  所有的构造函数中都有一个原型属性prototype,本质上该属性就是对象(Object的实例对象)
    原型对象中默认有一个属性constructor,该属性指向原型所属的构造函数
    所有的实例对象中都有一个__proto__属性,该属性也指向构造函数的原型    对象,注意:__proto__属性不可以在编程中使用,该属性不是标准属性,实际 上该属性是浏览器内部自己使用的
     3. 构造函数、实例对象、原型对象三者之间的关系:
    1、构造函数都有原型属性prototype
    2、实例对象都有__proto__属性
    3、原型中都有constructor属性
   5. 对象属性的判断及方法的介绍
    1、hasOwnProperty(),该方法位于Object.prototype
    2、in  判断某个属性是否在构造函数或者原型链上
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号