JavaScript---OOP淺談1

對象化編程-------簡單地去理解就是把javascript能涉及到的範圍分成各種對象,對象下面再次劃分對象。編程出發點多是對象,或者說基於對象。所說的對象既包含變量,網頁,窗口等等。

注意:對象只是一種特殊的數據


1.基本對象

我們一般劃分的角度還是從數據類型這方面
Number
String
Array
Math
Data  
這邊我只是簡單地羅列出來部分,具體的可以參考http://www.w3school.com.cn/js/js_obj_intro.asp


2.下面介紹創建類和對象的模式

a.簡單方式:

var people = {};
people.name = "steven";
people.age = 23;
people.getName = function () {
	return "People's name is " + this.name;
};

console.log(people.getName()); //People's name is steven
console.log(people.age); //23

不好的地方就是:在創建多個對象的場景下會產生很多冗餘的代碼,耦合度不高!


b.工廠模式:

function makePeople(name, age, job) {
	var _obj = {};
	_obj.name = name;
	_obj.age = age;
	_obj.job = job;
	_obj.getName = function () {
		return "People's name is " + this.name;
	}
	return _obj;
}

var webdesigner = makePeople("steven", 23, "wendesigner");
console.log(webdesigner.getName); //People's name is steven
console.log(webdesigner.job) //wendesigner


不好的地方就是:實例化比較頻繁


c.原型模式(prototype)

function People(){};
People.prototype = {
       constructor :People,
       name:"steven",
       age:23,
       job:"webdesigner",
       getName:function(){
             return "People's name is "+this.name;
      }
}
  
var webdesign = new People();
var carman = new People();
console.log(webdesign.getName());    //People's name is steven
console.log(carman.getName());    //People's name is steven


不好的地方就是:初始化參數不支持傳遞,還有就是原型的所有屬性和方法會被所有的實例共享


d.混合模式(原型 + 構造函數)

function People(name.age.job) {
	this.name = name;
	this.age = age;
	this.job = job;
};
People.prototype = {
	constructor : People,
	getName : function () {
		return "People's name is " + this.name;
	}
}

var webdesigner = new People("steven", 23, "webdesigner");
var carman = new People("zyc", 24, "carman");
console.log(webdesigner.getName()) //People's name is steven
console.log(carman.getName()) //People's name is zyc


不好的地方就是:對象的屬性和方法也是共用的


e.閉包下的私有變量模式

(function () {
	var name = "";
	People = function (val) {
		name = val;
	};
	People.prototype = {
		constructor : People,
		getName : function () {
			return "People's name is " + name;
		}
	};
})();

var webdesigner = new People("steven");
console.log(webdesigner.name); //undefined
console.log(webdesigner.getName()); //People's name is steven

var carman = new People("zyc");
console.log(carman.name); //undefined
console.log(carman.getName()); //People's name is zyc

不好的地方就是:初級程度的代碼不是很讓人理解


如果我寫的有問題,還是對這裏的內容有疑惑,都希望大家提出來!




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章