面向对象---组织函数

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>面向对象</title>
</head>
<body>
    一:建立对象
        1.Object组织函数或对象字面量建立单个对象
        2.工场情势:(用函数来封装特定接口建立对象的细节)
        3.组织函数:
        4.原型情势:
        5.组合情势(最经常运用*)
        6.动态原型情势
        7.寄生组织函数情势

</body>
<script type="text/javascript">
    // 工场情势
    function createPerson(name,age,job) {
        var o = new Object();
        o.name = name;
        o.age = age;
        o.job = job;
        o.sayName = function(){
            alert(this.name);
        }
        return o;
    }
    var person1 = createPerson("leo",29,"doctor");
    var person2 = createPerson("jack",28,'teacher');
    // 瑕玷:函数createPerson()能够建立依据接收的参数来构建一个包括一切必要信息的     Person对象。
   //能够无数次的挪用这个函数,而每次他都邑返回三个属性和一个要领的对象。
   //工场情势虽然处理了建立多个雷同对象的题目,但却没有处理对象辨认的题目!!!(不懂什么意思)


    // 组织函数情势
    function Person(name,age,job){
        this.name = name;
        this.age = age;
        this.job = job;
        this.sayName = function(){
            alert(this.name);
        }
    }
    var person1 = new Person("leo",29,"doctor");
    var person2 = new Person("jack",28,'teacher');
    // 长处:建立自定义组织函数意味着未来我们能够将他的实例标识为一种特定的范例,
    //而这恰是组织函数情势赛过工场情势的处所
    // 瑕玷:就是每一个要领都要在每一个实例上建立一遍,在前面的例子中person1,person2都有一个一样的sayName要领,即是建立了两次雷同的sayName要领

    
    //原型情势
    function Person(){

    }
    Person.prototype.name = 'leo';
    Person.prototype.age = 29;
    Person.prototype.job = 'doctor';
    Person.prototype.sayName = function(){
        alert(this.name);
    }
    var person1 = new Person();
    person1.sayName();  // leo
    var person2 = new Person();
    person2.sayName();  //  leo
    alert(person1.sayName == person2.sayName);  //true 
    // 长处:能够让一切的对象实例同享它所包括的一切属性和要领,
    //换句话说没必要在组织函数中定义对象实例的信息,而是能够将这些信息直接添加到原型对象中
    // 瑕玷:省略掉了为组织函数通报初始化参数的步骤,使得一切实例在默许情况下都获得雷同的属性值
          // 属性同享

    // 组合情势  
    // 运用组织函数情势和原型情势,组织函数定义实例属性,原型定义要领和同享属性
    function Person(name,age,job){
        this.name = name;
        this.age = age;
        this.job = job;
    }
    Person.prototype = {
        constructor:Person,  // 对象字面量情势会使constructor属性重写,所以要从新赋值
        sayName:function(){
            alert(this.name);
        }
    }

</script>
</html>
    原文作者:大桔子
    原文地址: https://segmentfault.com/a/1190000008102352
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞