摘要:一實體類的定義定義類有參構造方法二定義方法以設置實體類的屬性值方法三定義方法以獲取實體類的屬性值方法四構造實例對象使用全參構造方法獲取實例對象桐人男控制臺打印實例
一、Node.js "實體類" 的定義
//定義類Person 有參構造方法 function Person(name, sex, age, addr, salary) { this.name = name; this.sex = sex; this.age = age; this.addr = addr; this.salary = salary; }二、定義set 方法以設置 實體類Person 的屬性值
//set 方法 Person.prototype.setName=function (name) { this.name=name; }; Person.prototype.setSex=function (sex) { this.sex=sex; }; Person.prototype.setAge=function (age) { this.age=age; }; Person.prototype.setAddr=function (addr) { this.addr=addr; console.log("Person setAddr"); }; Person.prototype.setSalary=function (salary) { this.salary=salary; };三、定義get 方法以獲取 實體類Person 的屬性值
//get 方法 Person.prototype.getName=function(){ return this.name; }; Person.prototype.getSex=function(){ return this.sex; }; Person.prototype.getAge=function(){ return this.age; }; Person.prototype.getAddr=function(){ return this.addr; }; Person.prototype.getSalary=function(){ return this.salary; };四、構造Person實例對象
//使用new 全參構造方法 獲取實例對象 let Kirito=new Person( "桐人", "男", 18, "SAO", 999999999); //控制臺打印Person實例 console.log(Kirito); console.log("-------------------------------------------------------" + " ");
//使用get方法 獲取Person屬性值 console.log(Kirito.getName()); console.log(Kirito.getSex()); console.log(Kirito.getAge()); console.log(Kirito.getAddr()); console.log(Kirito.getSalary()); console.log("-------------------------------------------------------" + " ");
//使用new 無參構造方法 獲取實例對象 let Ausua = new Person(); //使用set方法 設置Person屬性值 Ausua.setName("亞絲娜"); Ausua.setSex("女"); Ausua.setAge(18); Ausua.setAddr("SAO"); Ausua.setSalary(999999999); //控制臺打印Person實例 console.log(Ausua); console.log("-------------------------------------------------------" + " ");五、Node.js 實例化的函數調用 工作流程
//Node.js 實例化的函數調用 工作流程 //let person =new Person();流程 //每一個函數對象都有自己的prototype對象 : function Person() 有自己的prototype對象 //這個prototype對象是一個字典表 可以定義自己的方法 : Person.prototype.set/get方法的定義 //把這個函數對象看做一個類 使用new 來創建類的實例 //這個實例產生時 key--->__proto__ //將函數的prototype 淺復制 至實例中 作為value //這樣就建立了__proto__ : prototype 關聯關系 //實例創建完成后 綁定到這個函數的this里面 //在后續的函數調用過程中 這個實例通過this進行傳遞 //this傳遞的實例在函數的方法體中進行一系列初始化等運算 //創建完實例,通過實例進行調用函數,其順序是:先找自己方法體中的字典表 ,在去__proto__里面找 //實現在類中定義好了key---value與函數方法后 再new出來的實例對象也具備相同的方法 //我們可以通過調用這些函數方法來進行對類對象、屬性的一系列操作 console.log("-------------------------------------------------------" + " ");六、Node.js繼承的實現
//Node.js extends console.log("繼承"); let Lady=function(){};
//繼承方式: //1、不可用 //Lady.prototype=Person.prototype; //這2個prototype指向了同一個對象 若擴充Lady的方法 Person也會隨之更改
//2、在原來基類的prototype上進行淺復制 let Super= function(){}; Super.prototype=Person.prototype; Lady.prototype=new Super();
//定義子類Lady新的方法 Lady.prototype.setHobby=function(hobby){ this.hobby=hobby; }; Lady.prototype.getHobby=function(){ return this.hobby; }; //實例化子類Lady對象lady let lady= new Lady(); //設置子類繼承的屬性 lady.setName("Illyasviel"); lady.setSex("女"); lady.setAge(18); lady.setAddr("Fate"); lady.setSalary(999999999); //設置子類特有的屬性 lady.setHobby("Kiss you GoodBye"); console.log(lady); console.log("-------------------------------------------------------" + " ");
//3、使用util.inherits實現集成 let util =require("util"); //定義子類Student let Student =function(cno,cname){ this.cno=cno; this.cname =cname; }; //子類屬性對應的set get 方法 Student.prototype.setCno=function(cno){ this.cno=cno; }; Student.prototype.setCname=function(cname){ this.cname=cname; }; Student.prototype.getCno=function(){ return this.cno; }; Student.prototype.setCname=function(){ return this.cname; }; //繼承Person util.inherits(Student,Person); let student =new Student(1,"動漫一班"); student.setName("Sakura"); student.setSex("女"); student.setAge(18); student.setAddr("Fate"); student.setSalary(999999999); console.log(student); console.log("-------------------------------------------------------" + " ");七、方法的重寫
//方法的重寫 console.log("方法的重寫---override"); //lady的prototype中setAddr函數 //key:setAddr沒變 但是value:setAddr的function已經改變 //覆蓋掉原Person.prototype.setAddr Lady.prototype.setAddr=function(addr){ this.hobby=addr; console.log("override setAddr"); }; lady.setAddr("Fate Stay Night"); console.log("-------------------------------------------------------" + " ");
//如方法重寫后要調用基類Person的setAddr 那么需要顯示傳遞this console.log("方法重寫后調用基類Person的setAddr"); Lady.prototype.setAddr=function(addr){ Person.prototype.setAddr.call(this); }; lady.setAddr("Fate/Zero");八、總結與思考
// 總結與思考: // // 因為Node.js中沒有Java等高級語言中class類的概念 故出現了__proto__ 與 prototype // 與java相比 其兩者的關系類似于繼承: // 函數創建時,Node.js會為這個函數自動添加prototype屬性,值是空的字典表對象{} // 在let person=new Person();時 ,此時function Person(){} 就是一個構造函數(constructor) // 那么JS就會幫你創建該構造函數的實例 // 該實例 會繼承 構造函數內 已定義的 prototype指向的所有屬性和方法 // 該實例 通過 設置自己的__proto__ 指向構造函數的 prototype來實現這種繼承 // Node.js通過__proto__和prototype的合作實現了原型鏈、對象的繼承 // Node.js是單繼承的,Object.prototype是原型鏈的頂端,類似于Java的Object類 // 構造函數,通過prototype來存儲要共享的屬性和方法,也可以設置prototype指向現存的對象來繼承該對象 // 對象的__proto__指向自己構造函數的prototype // console.log(Ausua.__proto__==Person.prototype); 返回true // 注意:prototype 函數的內置屬性 顯示修改對象的原型的屬性 // __proto__ 實例對象的內置屬性 JS內部使用尋找原型鏈的屬性 // ES規范定義對象字面量的原型就是Object.prototype // 最后 // 引用《JavaScript權威指南》的一段描述: // Every JavaScript object has a second JavaScript object (or null , but this is rare) associated with it. // This second object is known as a prototype, and the first object inherits properties from the prototype.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101180.html
摘要:面向對象之封裝繼承多態封裝將類中的信息進行隱藏在類的內部,不允許外部程序信息直接訪問,而是只能通過該類的提供的方法來實現對隱藏信息的提供和訪問。與之對應,包含內部類的類被稱為外部類。 面向對象之封裝、繼承、多態 封裝 將類中的信息進行隱藏在類的內部,不允許外部程序信息直接訪問,而是只能通過該類的提供的方法來實現對隱藏信息的提供和訪問。 好處 只能隱藏規定的方法和數據 隱藏類的實現細節,...
摘要:面試專欄正式起更,每周一三五更新,提供最好最優質的面試內容。繼上一篇面試常考內容之面向對象發表后,今天更新面向對象的最后一篇。面向對象的主要特征為封裝繼承多態。為了提高內聚性減少引起變化,單一原則是低耦合高內聚的面向原則上的引申。 PHP面試專欄正式起更,每周一、三、五更新,提供最好最優質的PHP面試內容。繼上一篇PHP面試??純热葜嫦驅ο螅?)發表后,今天更新面向對象的最后一篇(3...
摘要:前言是面對對象的語言,因此有必要單獨紀錄下對象的各種定義和理解。面對對象基本概述概述是基于面向過程的變成思想,是對面向過程的一種封裝。面對對象開發就是不斷的創建對象,使用對象,指揮對象做事情。面對對象設計其實就是在管理和維護對象之間的關系。 前言 java是面對對象的語言,因此有必要單獨紀錄下對象的各種定義和理解。 面對對象,主要包括:面向對象思想,類與對象及其使用,對象的內存圖,成...
摘要:中,任何未處理的受檢查異常強制在子句中聲明。運行時多態是面向對象最精髓的東西,要實現運行時多態需要方法重寫子類繼承父類并重寫父類中已 1、簡述Java程序編譯和運行的過程:答:① Java編譯程序將Java源程序翻譯為JVM可執行代碼--字節碼,創建完源文件之后,程序會先被編譯成 .class 文件。② 在編譯好的java程序得到.class文件后,使用命令java 運行這個 .c...
摘要:中,任何未處理的受檢查異常強制在子句中聲明。運行時多態是面向對象最精髓的東西,要實現運行時多態需要方法重寫子類繼承父類并重寫父類中已 1、簡述Java程序編譯和運行的過程:答:① Java編譯程序將Java源程序翻譯為JVM可執行代碼--字節碼,創建完源文件之后,程序會先被編譯成 .class 文件。② 在編譯好的java程序得到.class文件后,使用命令java 運行這個 .c...
閱讀 667·2021-10-09 09:41
閱讀 651·2019-08-30 15:53
閱讀 1079·2019-08-30 15:53
閱讀 1213·2019-08-30 11:01
閱讀 1571·2019-08-29 17:31
閱讀 992·2019-08-29 14:05
閱讀 1718·2019-08-29 12:49
閱讀 415·2019-08-28 18:17