91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript面向對象程序設計中對象的定義和繼承詳解

發布時間:2020-09-29 01:30:52 來源:腳本之家 閱讀:152 作者:chelen_jak 欄目:web開發

本文實例講述了JavaScript面向對象程序設計中對象的定義和繼承。分享給大家供大家參考,具體如下:

在面向對象的Javascript編程中,希望代碼優雅有高效是非常重要的。javascript中不存在類的概念,只有對象。要想把Javascript代碼寫的像java 或者C++一樣優雅,就得考慮如何去實現,同時也要考慮性能和高效。定義javascript對象的方式有很多,繼承的方式也很多。通過不斷地實踐,推薦如下的方法:

1.Javascript對象的定義采用混合方式【構造函數 +原型方式(prototype)】

(1)通過構造函數方式定義對象的所有非函數屬性

(2)用原型方式定義對象的函數屬性

采用這種方式,所有的屬性都是單一對象私有的,而方法則是所有對象公有的,對象之間的屬性不相互干擾,各個對象間共享同一個方法。

//使用原型+構造函數方式來定義對象
//構造函數定義對象的非函數屬性<strong>
function Person()
{
    this.username = new Array();
    this.password = "123";
}
//通過原型方式定義對象的函數
Person.prototype.getInfo = function()
{
    alert(this.username+","+this.password);
};
var p = new Person();
var p2 = new Person();
p.username.push("zhangsan");
p2.username.push("lisi");
p.getInfo();
p2.getInfo();

在現實的開發過程中,我們可能希望開發的各個類(實質是對象)能像java程序中放到一個包中統一管理,統一使用,而各個對象相互獨立,同時避免對象重名等等因素,我們需要給每個類有個作用域,此時我們采用將對象放到自定匿名函數的方式來解決,這一點和jQuery開發插件的有點類似。代碼如下:

/**
 * @author jasson
 * @include common.js
 */
//對象存在就等于對象,對象不存在就創建{}
var JassonChart = JassonChart || {};
(function(){
  //構造函數定義對象的非函數屬性
  function Person()
  {
    this.username = new Array();
    this.password = "123";
  }
  //通過原型方式定義對象的函數
  Person.prototype.getInfo = function()
  {
      alert(this.username+","+this.password);
  };
  //將該類放到JassonChart中,類似java中的包,或者C++中的
  JassonChart.Person= Person;
}());
//調用該類庫中的Person類
var p = new JassonChart.Person();

這樣我們可以定義多個類,每個類都采用如上的方式實現,這樣各個類相互都有作用域,非常規范。對于我們要用到的一些工具類,我們可以采用簡單的對象進行定義,代碼如下

/**
* @author jasson
*/
var JassonChart = JassonChart || {};
JassonChart .util = {
constants : {
WIDTH : 'width',
HEIGHT : 'height',
SVG : 'SVG',
CANVAS : 'CANVAS',
G : 'G', //svg element
STRING : 'string'
},
distance : function(a, b) {
var dx = a.x - b.x;
var dy = a.y - b.y;
return Math.sqrt(dx * dx + dy * dy);
}
};

2.Javascript對象的繼承采用如下幾種方式

2.1 Javascript對象的繼承采用混合方式【構造函數 +原型方式(prototype)】

在JavaScript中最好的方式就是用混合方式實現對象間的繼承。和定義對象一樣,我們可以將屬性和方法用不同的方式定義,用call或apply方式定義繼承對象的屬性,利用原型鏈的方式實現方法的繼承。如下代碼所示:

//使用混合的方式實現對象的繼承
function Parent(hello)
{
  this.hello = hello;//定義父類的屬性
}
Parent.prototype.sayHello = function()//定義父類的方法
{
  alert(this.hello);
}
function Child(hello,world)
{
  Parent.call(this,hello);//繼承父類的屬性
  //or Parent.apply(this,arguments);//繼承父類的屬性
  this.world = world;
}
Child.prototype = new Parent();//繼承父類的方法
Child.prototype.sayWorld = function()
{
  alert(this.world);
}
var child = new Child("hello","world");
child.sayHello();
child.sayWorld();

2.2 深度拷貝方法

所謂"深拷貝",就是能夠實現真正意義上的數組和對象的拷貝。它的實現并不難,只要遞歸調用"淺拷貝"就行了。

function deepCopy(p, c) {
  var c = c || {};
  for (var i in p) {
  if (typeof p[i] === 'object') {
    c[i] = (p[i].constructor === Array) ? [] : {};
deepCopy(p[i], c[i]);
} else {
c[i] = p[i];
}
}
return c;
}

使用的時候這樣寫:

var Doctor = deepCopy(Chinese);

現在,給父對象加一個屬性,值為數組。然后,在子對象上修改這個屬性:

Chinese.birthPlaces = ['北京','上海','香港'];
Doctor.birthPlaces.push('廈門');

這時,父對象就不會受到影響了。

alert(Doctor.birthPlaces); //北京, 上海, 香港, 廈門
alert(Chinese.birthPlaces); //北京, 上海, 香港

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

榆中县| 阿克| 都江堰市| 福清市| 自治县| 屏山县| 惠东县| 巫溪县| 分宜县| 张北县| 邻水| 闻喜县| 宁晋县| 芷江| 五莲县| 吐鲁番市| 耒阳市| 昌都县| 漳浦县| 郯城县| 琼结县| 北辰区| 巨野县| 铜梁县| 湘潭市| 田林县| 广东省| 丹巴县| 略阳县| 南雄市| 鄢陵县| 桦川县| 岳西县| 河北省| 定安县| 襄汾县| 阜康市| 咸丰县| 外汇| 阳东县| 搜索|