创建对象的一些方法

1. 工厂方法创建对象

【概述】:工厂方法对象,就是通过一个方法来构建对象,在构建对象的属性的时候,通过形参来给对象的属性赋值,然后最后返回这个对象。

【代码示例】

        function factoryMode(name,age,skill){
            var obj = {
                name:name,
                age:age,
                skill:skill,
                showSkill:function(){
                    console.log(name+ '\'s skill is '+this.skill);
                }
            }
            return obj;
        }

        var obj1 = factoryMode('haduo',22,'basketball');
        var obj2 = factoryMode('Yang',21,'sleep');
        var obj3 = factoryMode('Cui',22,'study');
        var obj4 = factoryMode('Guo',22,'deeplearning');
        obj1.showSkill();
        obj2.showSkill();
        obj3.showSkill();
        obj4.showSkill();
        console.log(obj1);

输出结果

haduo’s skill is basketball
Yang’s skill is sleep
Cui’s skill is study
Guo’s skill is deeplearning
创建对象的一些方法

【注】工厂模式创建的对象类型都是Object,如果分不清楚不同对象

2.构造函数

【构造函数执行流程】

  1. 立即创建一个新的对象
  2. 将新建的对象设置为函数中的【this】,在构造函数中可以使用this来引用新建的对象。
    3.逐行执行函数中的代码
  3. 将创建的对象作为返回值返回

【代码演示】

        function Person(name,age,skill){
            this.name = name;
            this.age = age;
            this.skill = skill
            this.show = function(){
                console.log(this.name+'\'s skill is '+this.skill);
            }
        }

        var person1 = new Person('haduo',22,'basketball');
        console.log(person1);
        person1.show();

【输出结果】
创建对象的一些方法
这里我们明显的看到,对象名变成了Person,于工厂模式的明显不同。

  • 使用同一构造函数创建的对象,我们称为一类对象,也将一个构造函数称为一个类
  • 我们将通过一个构造函数创建的对象,称为是该类的实例

以上构造函数任存在一些问题

我们每次创建一个person对象,在person对象实例中就会创建一个新的方法,我们可以吧这个方法剥离出去

function Person(name,age,skill){
            this.name = name;
            this.age = age;
            this.skill = skill
            this.show = fun;
        }
function fun(){
	console.log(this.name+'\'s skill is '+this.skill);
}

但是这种方法不安全,尽量不要在全局作用域中定义

原型prototype

我们所创的每一个对象,解析器都会向函数中添加一个属性prototype,这个属性对应着一个对象,这个对象就是我们所谓的原型对象


  • 如果函数当做普通函数调用的时候,prototype没有任何作用
  • 当函数以构造函数的形式调用的时候,它所创建的对象都会有一个隐含的属性指向该构造函数的原型对象,我们可以通过__proto__来访问该属性
  • 原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象*有的内容,统一设置到原型对象中
  • 当我们访问队形的一个属性或方法的时候,它会先在对象自身中寻找,如果有则直接使用,如果没有则会去原型对象中寻找,如果找到,则直接使用
  • 以后我们创建构造函数的时候,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,这样不用分为别为每一个对象添加,也不会影响到全局作用域,就可以使每个对象都具有这些属性和方法了
        function Person(name,age,skill){
            this.name = name;
            this.age = age;
            this.skill = skill
        };

        Person.prototype.show = function(){
            console.log(this.name+'\'s skill is '+this.skill);
        };

        var person1 = new Person('haduo',22,'basketball');
        var person2 = new Person('Ynag',21,'joking');
        person2.show();
        person1.show();
上一篇:Java_接口回调与匿名内部类


下一篇:UE4插件 Skills Tree System 4.15-4.26