javascript
云笔记项目-补充JS面向对象编程基础知识
簡單介紹:
此部分知識為在做云筆記項目中補充,因為云筆記項目中涉及到前端js,里面寫了很多js腳本,用到了創建js屬性和方法,在js中直接聲明的屬性和方法最終都會變成window的對象,即其成為了全局變量,可以在控制臺直接調用。
(1)如何創建js對象
1 JSON語法聲明對象(直接量聲明語法)-->var obj={}
2 使用Object創建對象? -->var obj=new Object()
? (2) js對象可以后期添加屬性
1?var obj={};??obj.name="tom";?這樣可以使用obj.name訪問其屬性
2?var obj1=new Object();?obj1.name="tom";?這樣也可以訪問obj.name、
(3)js對象特點:
?1.new Object()和JSON語法創建的對象沒有差別,JSON語法簡潔方便,更加容易使用。
?2.對象可以隨時添加屬性,對象.屬性=值
?3.不存在的屬性,值是undefined,undefined 相當如false,利用這點可以檢查屬性是否存在,if(!obj.age){ console.log("沒有age屬性"); }或者if(obj.age){console.log("年齡"+obj.age);}
?4.可以隨時刪除對象的屬性?delete 對象.屬性,如?delete obj.age;,刪除成功后返回true。
?5.JS Object底層本質上是一個散列表,為對象添加屬性,本質上是添加了key和value,key是屬性名,value是屬性值。訪問對象屬性,本質上是get(key)。刪除對象屬性,本質上是delete(key)。
(4)JS對象的方法
JS對象的方法,本質上還是一個屬性,是一個屬性值為函數對象的屬性。obj.who=function(){console.log(this.name);}obj.who()為調用方法,obj.who為調用方法屬性的值,將打印方法到控制臺。
可以像屬性一樣刪除方法,?delete obj.who; 刪除后再次調用方法執行會報錯沒有方法。
可以修改屬性值,如果屬性值為方法,也可以修改方法。obj.name='tom',?obj.name='Jerry'; obj.name被覆蓋了,成了Jerry。obj.who=function(){console.log(this.name);},obj.who=function(){console.log('hello world');}obj.who方法被覆蓋了,執行后的結果為hello world。云筆記項目中的alert方法,就被覆蓋了,里面重新寫了一個方法覆蓋了原生的alert方法。
JS方法中沒有重載!!在做云筆記的時候,當時還差點想重載加載筆記列表的方法,修改參數列表,企圖實現方法重載,原來跟java不一樣,是不能重載的。
obj.add=function(a,b){return a+b},obj.add=function(a,b,c){return a+b+c},這樣方法被覆蓋了,只保留第二個方法。如果調用add(1,2),第三個參數發現沒有,導致第三個參數為undefined,導致整個結果為NAN,如果寫成add(1,2,3,4),第四個參數沒用上,也能執行出結果,JS有點靈活。
(5)使用JSON直接聲明屬性和方法
?var obj={name:'tom',age:28,who:function(){console.log('this.name')}};
(6)默認的變量和函數
在網頁中直接聲明的變量和函數是window對象的屬性和方法,即全局變量,如云筆記項目中聲明的noteTemplate,notebookTemplate等,都是window的屬性,里面也寫了很多方法,發現也成了window的方法,控制臺可以直接打window后能彈出
?調用window.alert();方法直接彈出重寫后的提示。
補充:
(1)JS對象沒有封裝性可言,JS沒有面向對象的三大特性,繼承多態和封裝,Javascript不是面向對象的語言。
(2)JS中所有的方法都有返回值,如果有return值就是return的值,沒有就默認為undefined
轉載于:https://www.cnblogs.com/youngchaolin/p/10502425.html
總結
以上是生活随笔為你收集整理的云笔记项目-补充JS面向对象编程基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式之控制反转和依赖注入的使用小结
- 下一篇: 07.Numpy广播和ufunc