• js创建对象的三种方式和js工厂模式创建对象


    文章地址: https://www.cnblogs.com/sandraryan/

    创建对象

    创建对象的三种方式

    构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象

    1. 调用系统的构造函数创建对象(又称为实例化一个对象

      var obj = new Object();
      // 添加属性,方法
        obj.name = 'jack';
        obj.age = 20;
        obj.eat = function(){
            //匿名函数
            console.log('hi');
        }
      // 调用属性/方法
        console.log(obj.name);
        obj.eat();

    2. 自定义构造函数创建对象和工厂模式(不同)

    构造函数首字母大写(区分构造函数和普通函数的人为规定)

    对象是一个特定事物的属性和方法的集合,构造函数是类似于一大类的集合(js中没有类的概念)

    利用一个构造函数创建对象的过程称为实例化一个对象

      // 一个人的类型
        var person = new Object();
        person.name = 'lucy';
        person.age = 20;
        person.sayHi = function(){
            console.log('person ' + person.name);
            console.log('person ' + this.name);
    
        }
    
        // 一个学生的类型
        var stu = new Object();
        stu.name = 'sunny';
        stu.age = 18;
        stu.task = function(){
            console.log('study ' + stu.name);
            console.log('study ' + this.name);
        }
        // 在当前对象的方法中可以访问当前对象的属性,可用this指代
    
        // 调用各自的属性
        // 调用各自的方法
    
        person.sayHi();
        stu.task();
        //判断person是否是一个对象,不能判断是那个对象(person还是stu)
        console.log(person instanceof Object);
    创建对象的代码封装在一个函数中,可以一次性创建多个对象
    构造函数创建对象
     function Person(name,age) {
          this.name=name;
          this.age=age;
          this.sayHi=function () {
            console.log("您好");
          };
        }
        //创建对象---->实例化一个对象,的同时对属性进行初始化 需要new关键字
        var per=new Person("小红",20);
    工厂模式创建对象
        // 工厂模式创建对象
        function createObject(name,age){
            // 创建对象
            var obj = new Object();
            // 对象添加属性
            obj.name = name;
            obj.age = age;
            // 对象添加方法
            obj.sayHi = function(){
                console.log('hi');
            };
            return obj;
        }
         var per1 = createObject('mary',10);
         console.log(per1);
         
        var per2 =  createObject('jack',20);
        console.log(per2);
      //new 用于创建空对象并使this指向当前对象

       // 方法也可以传递不同的值
        function createObject(name,age){
            var obj = new Object();
            obj.name = name;
            obj.age = age;
            obj.sayHi = function(word){
                console.log(word);
            };
            return obj;
        }
         var per1 = createObject('mary',10);
         per1.word = 'hello';
         console.log(per1);
         
        var per2 = createObject('jack',20);
        per2.word = 'hi';
        console.log(per2);

    共同点:都是函数,都可以创建对象,都可以传入参数

    工厂模式:

    函数名是小写

    有new,

    有返回值

    new之后的对象是当前的对象

    直接调用函数就可以创建对象

    自定义构造函数:

    函数名是大写(首字母)

    没有new

    没有返回值

    this是当前的对象

    通过new的方式来创建对象

    3. 字面量方式

     var Dog = {
            name: 'jack',
            age: 2,
            eat: function(){
                console.log('eating');
            }
        }
    
        Dog.eat();
        console.log(Dog);
     // 创建一个叫dog的对象,添加名字/年龄/颜色的属性,行走和吃东西的方法

    构造函数可以实例化对象

    构造函数中有一个属性叫prototype,是构造函数的原型对象

    构造函数的原型对象(prototype)中有一个constructor构造器,这个构造器指向的就是自己所在的原型对象所在的构造函数

    实例对象的原型对象(__proto__)指向的是该构造函数的原型对象

    构造函数的原型对象(prototype)中的方法是可以被实例对象直接访问的

  • 相关阅读:
    【BZOJ 1069】【SCOI 2007】最大土地面积 凸包+旋转卡壳
    【POJ 2187】Beauty Contest 凸包+旋转卡壳
    1056: [HAOI2008]排名系统
    1874: [BeiJing2009 WinterCamp]取石子游戏
    1055: [HAOI2008]玩具取名
    2338: [HNOI2011]数矩形
    1060: [ZJOI2007]时态同步
    1054: [HAOI2008]移动玩具
    1053: [HAOI2007]反素数ant
    1052: [HAOI2007]覆盖问题
  • 原文地址:https://www.cnblogs.com/sandraryan/p/11563908.html
Copyright © 2020-2023  润新知