美文网首页
面向对象

面向对象

作者: 他在发呆 | 来源:发表于2017-05-21 18:32 被阅读0次
    概念:一组无序属性的集合;属性的值可以是普通数据类型;
    键值对:如(color:red)有key有对应的value值
    
    var car={
        name:'xiaoming',
        age:5,
        run:function(){
            console.log('nihao');
        }
    }
    console.log(typeof car);//object
    
    • 访问对象的属性值:car.name

    • 访问对象属性使用点+属性名

    • 修改对象的属性:对象+点+对象名=新的属性值

    car.name="1111"
    
    • 添加对象属性:对象+点+新对象名=属性值
    car.num="123";
    
    • 删除对象属性
    delete car.num;
    
    注:  一个空的dom对象会有很多个对象属性,只是属性值都是null
    
    • 使用[属性名]来访问对象属性,必须加双引号
        var pc = {//字面量创建
            name: "dell",
            size: "15",
            color: "black",
            start: function(){
                console.log('welcome to myWorld');
            }
        }
        console.log(pc['name']);
        pc["name"]="apple";
        pc["price"]=7280;
        console.log(pc["price"]);
        delete pc["color"];
        console.log(pc);
    
    • 为什么有两种操作方式:点更简洁,点的右边必须是一个具体的属性名,[]使用范围多,更灵活

    • []的使用场景,用于不确定属性的访问

    • 创建属性访问器

        function getPro(proName){//形参
            console.log(pc.proName);//这样不行,不是具体的属性名undefined
            console.log(pc[proName])
        }
    
    • 使用for-in操作对象
    for(let prop in "abcd"){
            console.log(prop);
            console.log(pc[prop])
            // 可以使用charAt()字符串操作函数
        }
    

    第二种创建对象方式 new + 构造函数

    var newObj = new Object();//可以省略();
    newObj.name = "tom";
    newObj.age = 20;
    delete newObj.name;
    

    工厂模式创建对象

        function factory(name,age,gender,stuNum){
            var obj = {};
            obj.name = name;
            obj.age = age;
            obj.gender = gender;
            obj.stuNum = stuNum;
            obj.say = function(){
                console.log("我叫:"+this.name+"我今年"+this.age)
            }
            //var obj = new Object(); 
            return obj;
        }
    使用工厂函数创建对象
    var stu = factory("name",28,"男","h51614");
    

    构造函数

    是一种特殊的函数,用于创建同类对象
    js是弱语言,ES6已经正式引入了类
    自带的有Date() String() Array();

    构造函数的创建

        function Person(name,age){
            this.name = name;
            this.age = age;
            this.say = function(){
                console.log("我叫"+this.name);
            }
        }
    

    构造函数和普通函数的区别:不适用return关键字,构造函数执行时,使用new关键字执行构造函数

    var p1 = new Person("tom",20);
    
    p1.say()
    

    构造函数的特性:与普通函数的区别

    1. 构造函数名首字母大写
    2. 构造函数内部使用this关键字处理属性赋值逻辑
    3. 构造函数不使用return关键字返回新对象
    4. 使用new关键字执行函数。

    构造函数与实例:实例是new+构造函数创建的对象,新对象叫做构造函数的实例,实例与构造函数之间是多对一的关系

    原型

    每一个函数都有一个私有的原型属性prototype,初试状态,这个值是一个object类型的对象

    原型最重要的作用是为所有实例提供公共的空间,原型内的属性可以提供给构造函数所有的实例复用

     每一个实例都有一个‘__proto__’属性指向构造函数的原型  
    
    什么是原型?每一个函数都有一个私有的原型属性prototype,
    他们对应的实例都有一个公共的__proto__指向构造函数的原型
    是函数就有__proto__,
    
    

    相关文章

      网友评论

          本文标题:面向对象

          本文链接:https://www.haomeiwen.com/subject/ilkvxxtx.html