对象基础:

    引用数据类型:
    var person={
        name:"hjd",
        }
    //添加age属性:
    Object.defineProperty(person,"age",{
        value:"30";
    //可删除性:
    configurable:true(可删)/false(不可删);
    //可枚举性:
    enumerable:true//false;
    //可修改性:
    writable:true//false;
    })

对象创建方式:
     //对象的添加:1
    var person={
        name:"zhangsan",
        age:23,
        say:function(){
            console.log(1,2,3)
        }
    };
    console.log(person.name);
    console.log(person.age);
    person.say();
    //    对象的添加:2
    var person1={
    };
    person1.name ="lisi";
    person1.age=34;
    console.log(person1.name);
    console.log(person1.age);

    //   对象的添加:函数方法3
    function getPerson(name,age){
       return{
           name:name,
            age:age,
        sayName:function(){
            console.log(1,2,3)
            }
       }

    }
    var person2=getPerson("wangwu",33);
    console.log(person2.name);
    console.log(person2.age);

    //    对象的添加:函数方法4
    //    返回object
    function getPerson1(name,age){
        var obj=new Object();
        obj.name=name;
        obj.age=age;
        obj.sayName=function(){
            console.log(2,3,2)
        };

        return obj;

    }
    var p1=getPerson1("liqi",25);
    console.log(getPerson1("liliu",20));
    console.log(p1.name);
    console.log(p1.age);


    //    构造函数:
    function Person3(name,age){
        this.name=name;
        this.age=age;
        this.sayName=function(){
            console.log(1,1,1)
        }
    }
    var person5=new Person3("WANG",57);
    console.log(person5.name);
    console.log(person5.age);
    person5.sayName();

  //    遍历对象的属性:
    
    for(var x in person1){
        console.log(x)
    }
    // 遍历对象的属性值:
    for(var x in person1){
        console.log(person1[x])
    }


    var arr=[1,2,3,4];
    arr1=["zhang","wang","li"];

//    forEach遍历数组的值,后面要跟方法:

    arr.forEach(function(e){
        console.log(e+1);
    })//输出zhang1,wang1,li1


原型和原型链:
    函数本身是一个对象:
    1.作为函数,拥有prototype属性,prototype的custractor属性又指向函数本身.此函数产生的对象拥有-proto-属性,这个属性值和产
    生他的函数的prototype属性是相等的.
    2.函数作为对象本身,也具有-proto-属性,此属性指向上一级产生它的函数的prototype值,当上一级到达object时,object的-proto-
    为null

例子:

      function Person(){
    }
    Person.prototype.name="zhangsan";
    Person.prototype.arr=[1,2,3,4];
    var p1=new Person();
    p1.name="lisi";

    var p2=new Person();

    console.log(p1.name);
    console.log(p2.name);

    //等号就是重新赋值:而不是设置属性
    p2.arr=[1,2,3,4,5];
    p2.arr.push(7);
    console.log(p1.arr);
    console.log(p2.arr);
    //    console.log(p1.arr);
    //    console.log(p2.arr);

    //    共用一个原型
        //    p1.arr.push(7);
    //    console.log(p1.arr);
    //    console.log(p2.arr);