学习面向对象(二)—创建对象--Mr.Ember


学习面向对象(二)

创建对象

(1) object 构造函数或者字面量可以用来创建单个对象

(2) 工厂模式:

优: 解决了大量相似对象的问题

劣: 没办法对对象进行识别
 function createPerson() {
           var o = new Object();
            o.name = name;
            o.age = age;
            o.sayName = function() {
                 alert(this.name);
            }
            return o;
 }

  var person1 = createPerson('ttw', 23);
  var person2 = createPerson('nini', 28);

(3) 构造函数模式:   特: 创建一个新对象 将构造函数的作用域赋值给新对象 执行构造函数的代码 返回一个新对象 劣: 全局作用域中定义的函数,只能被某个对象调用,这样发挥不了全局作用域的作用
function Person(name,age) {
         this.name = name;
         this.age = age;
         this.sayName = sayName
}

 function sayName() {
          alert(this.name);
}

     var person1 = new Person('ttw', 23);
     var person2 = new Person('nini', 28);

(4)原型模式: a. 不在构造函数中定义对象实例信息,而是将这些信息全部添加到原型对象上 b. 通过原型链访问数据 c. 统一在原型对象上添加属性,此时constructor和原型对象的指向不一致,此时需要采用object.defineProperty来修改原型对象的指向 d. 创建出来的实例指针指向原型,不指向构造函数。所以当创建实例后重写构造函数,此时实例创建的是原来的构造函数 f. 由于原型中所有的属性是被实例共享的,这样对于想拥有自己特性的实例是非常不利的
function Person(name,age) {
}

Person.prototype = {
       constructor: Person,
       name: 'ttw',
       age: 23,
       friends: ['cc','yl'],
       sayName: function() {
                    alert(this.name);
                }
       }
var person1 = new Person(); var person2 = new Person(); person1.friends.puah("nini"); alert(person1.friends); //'cc','yl','nini' alert(person2.friends); //'cc','yl','nini'

(5) 组合构造函数模式和原型模式 这种模式综合了构造函数的可修改单个实例属性和原型模式的构建实例共享函数的特性
 function Person(name,age) {
          this.name = name;
          this.age = age;
          this.sayName = sayName;
          this.friends = ['cc','yl'];
 }

 Person.prototype = {
          constructor: Person,
          sayName: function() {
               alert(this.name);
          }
}

 var person1 = new Person('ttw', 23);
 var person2 = new Person('nini', 28);

 person1.friends.puah("nini");

 alert(person1.friends);    //'cc','yl','nini'
 alert(person2.friends);    //'cc','yl'

(6) 动态原型模式   通过动态构建原型,首次初始化时,判断是否构建了原型函数 但是动态构建出来的原型是不能重写的,否则会发生切断实例和新原型之间的联系。参考(4)d.
function Person(name,age) {
        this.name = name;
        this.age = age;

        if(typeof this.sayName != 'function') {
                 Person.prototype.sayName = function() {
                        alert(this.name);
                 }
        }

}

var friends = new Person('ttw', 23);
friends.sayName();

优质内容筛选与推荐>>
1、BZOJ4196: [Noi2015]软件包管理器 (好题
2、Linux下which、whereis、locate、find 命令的区别
3、简单拖动层
4、多个tomcat对应多个项目
5、HDU 1024 拦截导弹


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn