zoukankan      html  css  js  c++  java
  • 创建对象的四种方式

    创建对象的三种方式

    1.字面量的方式去创建对象
    2.使用new字符创建对象
    3.自定义构造函数
    4.工厂模式创建对象
    对象是指:具有属性和方法
    我之前一直以为对象就是有属性没有方法,尴尬了。主要是忘记了。
    

    1.通过字面量的方式去创建对象

    
    var person1={
        name:'柯南',
        age:12,
        sex:'男',
        eat:function(){
            console.log("我饿了,想吃饭")
        },
        say:function(){
            console.log("我叫柯南")
        }
    }
    console.log("person.eat输出函数",person.eat)
    person.eat(); //直接输出 我饿了,想吃饭
    
    我们需要注意的是person.eat和person.eat()的区别
    person.eat是输出函数
    person.eat()是调用函数
    

    2.使用new字符创建对象

    var person2=new Object();
    person2.name='柯南'
    person2.age='21'
    person2.sex='男'
    person2.eat=function(){
        console.log("我饿了,想吃饭")
    }
    person2.say=function(){
        console.log("我叫柯南")
    }
    console.log( '性别',person2.sex ) //输出男
    

    上面这两种方式去创建对象的缺点

    虽然上面这两种都可以去创建对象
    但是我们创建出来的对象压根就不知道是什么类型?
    当然我们知道他们是OBject类型
    这个时候我们就需要使用自定义构造函数去创建对象了
    

    3.自定构造函数创建对象

     function Person(name,age,sex,like){
        console.log('没有给like形参传递值就是undeined',like)
        // 这里的this指向的是Person这个对象
        console.log('this',this)
        this.name=name;
        this.age=age;
        this.sex=sex;
        this.say=function(){
            console.log("我叫",name)
        }
    }
    //这一行代码表示的是创建一个对象
    //同时实例化一个对象
    //并且给这个对象的属性进行初始化
    //所以这一行代码并不简单
    let per1=new Person('柯南',19,'男');
    per1.say();
    console.log(per1 instanceof Person);//true
    
    现在我们知道了per1是属于Person类型的
    这就是自定构造函数创建对象的优势
    我们知道它创建的对象是哪个类型的
    ps:构造函数通常首字母大写
    

    当我们new一个对象的时候做了四件事情

    通过创建自定义对象我们明白了
    当我们new一个对象的时候做了四件事情
    1.开辟空间存储当前对象
    2.把this设置为当前对象
    3.设置属性和方法
    3.把this对象返回
    

    4.工厂模式创建对象

    function createObj(name,age) {
        let obj=new Object();
        obj.name=name;
        obj.age=age;
        obj.sayHi=function(){
            console.log(obj.name)
        }
        return obj;
    }
    let per=createObj('司藤',200)
    console.log(per.age); //200
    per.sayHi(); //司藤
    
  • 相关阅读:
    高精度除法(到小数点后200位)
    CodeForces-Zuhair and Strings(思维+枚举)
    Codeforces-Salem and Sticks(枚举+思维)
    idata的各个类型
    C51串口的SCON寄存器及工作…
    XCode快捷键
    Objective-C 的 self 和 super 详解 (用简单程序说明问题)
    UITextFieldDelegate委托方法注释
    Objective-C 基础语法log打印那些事儿(一)
    fcntl详细说明
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/15591109.html
Copyright © 2011-2022 走看看