分享學習內容,一起進步
哈羅,我又來了,來分享一下昨天的學習,一起進步呀!
原型的特點引出的一些問題
// 原型的概念:原型物件裡的所有屬性和方法 被所有建構函式例項化出來的物件所共享
// 這是一個很好的特點,但是也帶來了一些問題
// function Person(){
// }
// // 簡單物件
// Person.prototype={
// constructor:Person,
// name:'z3',
// age:'20',
// jop:'程式設計師',
// friends:['李四','王五'],
// sayName:function(){alert('我的名字!');},
// };
// var p1=new Person();
// var p2=new Person();
// // 問題:給p1新增了屬性,整體都會被新增(修改某一個例項物件,整體都會被修改)
// p1.friends.push('趙柳');
// alert(p1.friends);
// alert(p2.friends); //所以P2裡面也有趙柳
// 解決方法
// 組合使用原型和建構函式式模式 (定義一個類 開發時常用的方式 也是最廣泛的)
// function Person(name,age,friends,job){ //建構函式式
// this.name=name;
// this.age;age;
// this.friends=friends;
// this.job=job;
// }
// Person.prototypr={ //原型
// constructor:Person,
// sayName:function(){alert(this.name);},
// };
// // 這兩種結合就不會出現屬性值一樣的問題了(不會出現衝突了),這種方式,才是開發中用的模式
// var p1=new Person('z3','23','xiaoli','程式設計師');
// var p2=new Person('l4','21','xiaolu','程式設計師');
// alert(p1.friends);
// alert(p2.friends);
常用的開發模式
// 其他常用模式
// 1.動態原型模式:(讓你的程式碼 都封裝到一起)(把屬性和方法讀寫在一起)
// function Person(name,age,friends,job){ //建構函式式
// this.name=name;
// this.age;age;
// this.friends=friends;
// this.job=job;
// // 動態原型方法: (這裡只會執行一次,第一不存在,執行,第二次存在後不再執行)
// if(typeof this.sayName !='function'){ //通過這種方式新增方法
// Person.prototype.sayName=function(){
// alert(this.name);
// }
// }
// }
// 2.穩妥建構函式式:durable object(穩妥物件) 非常安全的環境中開發
// 沒有公共屬性 ,不能使用this,適合在安全的環境中開發
function Person(name,age,job){ //建構函式式
// 建立一個要返回的物件
var obj=new Object();
// 可以定義一下私有的變數核函式 (只能裡面呼叫 private)
var name=name;
// var sex='男',
// var saySex=function(){};
// 新增一個對外的方法
obj.sayName=function(){
alert(name); //在函式裡面可以呼叫私有變數
}
return obj;
}
var p1=new Person('z3');
p1.sayName();//要呼叫函式裡面的屬性,只能通過sayName()方法
JS的繼承
// js中怎麼去實現繼承:採用原型鏈的概念
// 建構函式 原型物件 例項物件 的關係
// 1. 建構函式.prototype=原型物件
// 2. 原型物件.constructor=建構函式
// 3.原型物件.isPrototypeOf(例項物件) 判斷例項物件的原型 是不是當前物件
// 4.建構函式 例項物件 (類與例項的關係)
// 父類建構函式 Sup
function Sup(name){
this.name=name;
}
// 父類的原型物件
Sup.prototype={
constructor:Sup,
sayName:function(){alert(this.anme);},
};
// 子類建構函式 Sub
function Sub(age){
this.age=age;
}
// 如果我們讓子類的 “原型物件” 等於 “父類的例項物件”,結果會怎樣?(實現了js的繼承)
// 有兩個變化
// 1.顯然此時原型物件將包含一個指向另一個原型的指標
// Sub的例項物件 和 Sup的例項物件有一個關係
// 2.相應的另一個原型中也包含著指向另一個建構函式的指標
// 子類的原型物件的構造器變成了 父類的構造器
Sub.prototype=new Sup('張三');
alert(Sub.prototype.constructor);//相當於父類的物件.constructor
var sub1=new Sub();
alert(sub1.name); //子類繼承了父類,所以繼承成了父類的屬性和方法
sub1.sayName();
昨天就學習了這些內容,今天也繼續加油吧!
相關文章
- 待學習內容
- 已學習內容
- CSS學習內容CSS
- 學習內容介紹
- 10.29 人工智慧學習內容人工智慧
- 10.15 人工智慧學習內容人工智慧
- Python基礎學習內容概述Python
- 學習python做爬蟲主要學習哪些內容呢?Python爬蟲
- Java怎麼學?Java的學習步驟分享Java
- 系統學習大資料需要學習哪些內容,五年大資料工程師經驗分享大資料工程師
- Linux學習多久?主要培訓哪些內容?Linux
- Vue 插槽之插槽內容學習總結Vue
- 知物由學 | 增量學習助力內容風控
- 分享swoole/go底層內容Go
- 網路安全難學嗎?需要學習什麼內容?
- 軟體測試培訓學習哪些內容?
- Linux 相關學習內容(不定期更新)Linux
- UI設計培訓主要學習哪些內容UI
- 2020-11-29第二週學習內容
- Linux課程零基礎可以學習嗎?學習哪些內容?Linux
- 網路安全需要學習哪些內容?網路安全線上學習
- 學習網路安全需要基礎嗎?網路安全內容學習
- 進階MAC大神,只差這一步之遙!一起來學吧!Mac
- 一起學習RustRust
- 入門UI設計一般要學習多久,學習哪些內容UI
- 工作間隙整理學習內容的意外收穫
- 新手入門前端,需要學習的基礎內容。前端
- elastic學習-elasticsearch8.5啟動控制檯內容Elasticsearch
- web前端開發入門,學習路徑以及具體的學習內容Web前端
- 通過單步除錯的方式學習 Angular 中帶有選擇器的內容投影使用方式除錯Angular
- 學網路安全需要什麼基礎?學習內容有哪些?
- 建立 PHP 擴充套件包步驟 -- 課程學習分享PHP套件
- 極客大學java進階訓練營學習分享Java
- Vue3學習(二十二)- 儲存文件內容Vue
- 【學習圖片】15.影像內容分發網路
- 軟體測試工程師需要學習什麼內容工程師
- GPT-3,深度學習和NLP的巨大進步GPT深度學習
- Python進階學習分享之迴圈設計Python