當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
javascript 面向对象(转)
生活随笔
收集整理的這篇文章主要介紹了
javascript 面向对象(转)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
?1.使用[]調用對象的屬性和方法
function User() {this.age = 21;this.sex = "男?"; } var user = new User(); alert(user["age"]);?
2.動態添加,修改,刪除對象的屬性和方法
//定義類 var user = new Object();//添加屬性和方法 user.name = "cary"; user.age = 21; user.show = function() {alert(this.name + "年?齡?為?:?" + this.age); } //執行方法 user.show(); //修改屬性和方法 user.name = "James"; user.show = function() {alert(this.name + "你?好?" ); } //執行方法 user.show(); //刪除屬性和方法 user.name = "undefined"; user.show = "undefined" //執行方法 user.show();
?
? 3.使用大括號{}語法創建無類型對象var obj = {}; var user = {name: "cary",age: 21,show: function() {alert(this.name + "年?齡?為?:?" + this.age);} } user.show(); var obj = {}; 等價于 var obj = new Object();
?
? 4.Prototype原型對象每個函數function也是一個對象,對應的類類型為“Function”,每個函數對象都有一個子對象prototype,表示函數的原型,所以當我們new
一個類的對象的時候prototype對象的成員都會被實例化為對象的成員。例如: function class1() { } class1.prototype.show = function() {alert("prototye member"); }var obj = new class1(); obj.show();
?
5.Function函數對象詳解 5.1.Function和Date,Array,String等一樣都屬于JavaScript的內部對象,這些對象的構造器是由JavaScript本身所定義的。上面說過函數對象對應的類型是Function,這個和數組的對象是Array一個道理。所以也可以像new Array()一樣new Function()來創建一個函數對象,而
函數對象除了使用這種方式還可以使用function關鍵字來創建。我們之所以不經常使用new Function()的方式來創建函數是因為一個函數一般
會有很多語句,如果我們將這些都傳到new Function()的參數中會顯得可讀性比較差。
var functionName=new Function(p1,p2,...,pn,body)其中p1到pn為參數,body為函數體。 5.2.有名函數和無名函數 有名函數:function funcName(){}
無名函數:var funcName=function(){} 他們之間的唯一區別:就是對于有名函數他可以出現在調用之后再定義,而對于無名函數,他必須是在調用之前就已經定義好。 5.3.我們可以利用Function的prototype對象來擴展函數對象,如: Function.prototype.show = function() {alert("擴展方法"); } function fun() { } fun.show(); fun.show().show(); fun.show().show();
這句的意思是調用fun.show()這個函數對象的show方法。是一個遞歸的調用,因為fun.show()也是一個函數。
?
6.傳遞給參數的隱含參數arguments
我們在使用函數時除了傳遞制定的參數,還創建了一個隱含的參數arguments,如下:
function fun(a, b) {for (var i = 0; i < arguments.length; i++) {alert(arguments[i]);} } fun(1,2,3); arguments還有一個屬性是callee,表示對函數對象本身的引用。
?
7.函數的apply,call方法
他們的作用都是將函數綁定到另外一個對象上去運行,兩者只是在定義參數上有區別,如下:
Function.prototype.apply(thisArg,argArray);
Function.prototype.call(thisArg[,arg1[,arg2...]]);
下面是例子,obj1的show1方法綁定到obj2后整個函數的執行環境就轉移到了obj2,所以this指針也就指向了obj2,所以會顯示fun2t:
function fun1() {this.name = "fun1";this.show1 = function(arg) {alert(this.name + arg);} } function fun2() {this.name = "fun2";this.show2 = function(arg) {alert(this.name + arg);} }var obj1 = new fun1(); var obj2 = new fun2();obj1.show1.apply(obj2, ["t"]); obj1.show1.call(obj2, "t");?
8.JavaScript中的類實現
8.1.命名空間:我們可以使用如下方式實現命名空間,namespace1 可以看做為命名空間。
var namespace1 = new Object(); namespace1.class1 = function() { //對?象初始化代碼 } var obj1 = new namespace1.class1(); 8.2.類成員
上面的我們已經為類添加了成員和方法,除了上面的方法我們還可以使用prototype的方式來給類添加成員,我們怎么做才是最合理的呢,首先
來看下前面的方式: function User() { //構造函數 } //成員定義 User.prototype.name = "cary"; User.prototype.show = function() {alert(this.name); } 上面的方式我們每定義一個類成員都要去寫User.prototype,我們可以重構為下面的形式: function User() { //構造函數 } //成員定義 User.prototype = {name : "cary",show = function(){alert(this.name);} }
?
?
8.3.私有成員
實現類的私有成員主要是利用變量的作用域,我們在構造函數中實現。
function User() { //構造函數中定義私有成員var name="cary";function show(){alert(name);}//共有成員this.setname=function(){name="james";} }8.4.靜態成員 我們可以通過給一個函數對象直接添加成員來實現靜態成員,如: function class1() { } //靜態屬性和方法 class1.staticpr = "staticpr"; class1.staticmet = function() { } //調用 class1.staticmet(); 我們可以通過給函數對象所在的類Function添加成員來實現給所有的函數對象默認添加靜態成員,如下: Function.prototype.staticmet = function() { } function class1() { } //調用 class1.staticmet();
?
9.實現反射機制 使用for(...in...)方式,for中的var p來存儲User對象的屬性和方法,我們來判斷是屬性還是方法,如下: function User() { //構造函數 } //成員定義 User.prototype = {name : "cary",show : function(){alert(this.name+"Hello");} } var u=new User(); for (var p in u) { if(typeof(u[p])=="function") { u[p]();}else { alert(u[p]);} }
?
?轉載于:https://www.cnblogs.com/laopo/p/5606469.html
總結
以上是生活随笔為你收集整理的javascript 面向对象(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【读书笔记】Android的Ashmem
- 下一篇: 使用选择器语法来查找元素 - 你想使用类