第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

javascript創(chuàng)建對象總結(jié)(下)-收場

標(biāo)簽:
Html/CSS JQuery JavaScript

在上一篇《JavaScript创建对象总结(中)-关系错乱的原型模式
我们已经介绍了原型模式跟解决原型模式所导致的问题的解决方法--组合使用构造函数模式和原型模式,从而道清了混论的原型,现在我们就要进行收尾了。

1.动态原型模式

在之前我们介绍的原型模式,是将构造函数与原型模式独立,而我们的动态原型模式则是相反,它将所有信息都写在了构造函数中,最重要的是这样也保持了构造函数跟原型的优点

function Person(name, age, job) {
    // 添加属性
    this.name = name;
    this.age = age;
    this.job = job;

    // 添加方法
    if (typeof getName !== "function") {
           Person.prototype.getName = function() {
                return this.name;
        }
    }
}

var person1 = new Person("xiaoming", 12, "student");
person1.getName();    // xiaoming

上面的例子就展现了动态原型模式的特性,利用判断语句,只有getName()方法不存在的时候,才会将这个方法添加到原型中,这就实现了将所有信息写在了构造函数中了。

注意:使用动态原型模式不能使用我们原型的简写模式。

2.寄生构造函数模式

这个模式的基本思想是创建一个函数,而这个函数仅仅用于封装创建的对象,然后在返回新创建的对象。

先看个简单的例子:

// 函数使用工厂模式
function Person(name) {
    var obj  = new Object();
    obj.name  = name;
    obj.getName = function() {
        return this.name;
    };

    return obj;
}

// 使用new操作符调用函数
var person1 = new Person("xiaoming");
person1.getName();    // xiaoming

其实这个模式的用途是我们在上一篇中已经提及了,就是为了给我们自定义对象添加特殊方法,例如上篇的例子。

// 寄生构造函数模式
function addArrMethod(arr) {  

  arr.countRepeat = function() {

    var list = {};
    // this指向arr
    for(var i = 0; i < this.length; i++) {
      if (! list [this[i]]) {
        list[this[i]] = 0;
      }
      list[this[i]]++;
    }

    return list ;
  }
  return arr;
}
var arr = [11, 12, 12, "name", 11, 14, 13,12];

var result = new addArrMethod(arr);
result.countRepeat();    // Object {11: 2, 12: 3, 13: 1, 14: 1, name: 1}

在这个例子中,我们给我们的arr数组对象添加了记录数组各项出现次数的方法。

3.稳妥构造函数模式

所谓稳妥那就是没有公共属性,并且其方法也引用this对象。并且稳妥方式与寄生构造函数相似,但有两处不同:

  1. 新创建对象的实例方法不引用this
  2. 不使用new操作符调用构造函数
funciton Person(name) {
    // 创建要返回的对象
    var obj = new Object();
    // 没有公共属性

    // 添加方法 
    obj.getName = function() {
        // 新创建对象的实例方法不引用this
        console.log(name);
    }
}

// 不使用new操作符调用构造函数
var person1 = Person("xiaoming");
person1.getName();    // xiaoming

注意:使用稳妥构造函数模式,只能通过添加的方法去访问变量--这也就是稳妥的实质了。(安全性)

點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報(bào)

0/150
提交
取消