摘要:對(duì)象字面量的方式今年創(chuàng)建實(shí)例的發(fā)明者我是今年屬性是可以動(dòng)態(tài)添加,修改的構(gòu)造函數(shù)無參構(gòu)造函數(shù)有參構(gòu)造函數(shù)我叫,今年歲實(shí)例化創(chuàng)建對(duì)象調(diào)用方法由于指針在對(duì)象實(shí)例的時(shí)候發(fā)生改變指向新的實(shí)例。是我的名字混合方式構(gòu)造函數(shù)原型我是,今年
javascript創(chuàng)建對(duì)象簡(jiǎn)單的說,無非就是使用內(nèi)置對(duì)象或各種自定義對(duì)象,當(dāng)然還可以用JSON;方法很多,也能混合使用。
對(duì)象字面量的方式:
var person={ name:"SF", age:25 say:function(){ alert(this.name+"今年"+this.age); } }; person.say();
創(chuàng)建Object實(shí)例:
var my = new Object(); my.name = "SF"; //JavaScript的發(fā)明者 my.age = 25; my.say = function() { alert("我是"+this.name+"今年"+my.age); } my.say();
*屬性是可以動(dòng)態(tài)添加,修改的
構(gòu)造函數(shù)
無參構(gòu)造函數(shù)
function Person(){} var person = new Person(); person.name = "SF"; person.age = "25"; person.say = function() { alert("My name is " + person.name); } person.say();
有參構(gòu)造函數(shù)
function Person(name,age) { this.name = name; this.age = age; this.say = function() { alert("我叫" + this.name + ",今年" + this.age + "歲); } } var my = new Person("SF",25); //實(shí)例化、創(chuàng)建對(duì)象 my.say(); //調(diào)用say()方法
由于this指針在對(duì)象實(shí)例的時(shí)候發(fā)生改變指向新的實(shí)例。這時(shí)新實(shí)例的方法也要重新創(chuàng)建,如果n個(gè)實(shí)例就要n次重建相同的方法。
工廠模式
function creatPerson(name,age){ var person = new Object(); person.name=name; person.age=age; person.say=function(){ alert(this.name+"今年"+this.age+"歲"); }; return person; }; var my = creatPerson("SF",25);//實(shí)例化 my.say();//調(diào)用
原型方式
function Person(name,age){} Person.prototype.name = "SF"; Person.prototype.age = 25; Person.prototype.say = function() { alert(this.name+"是我的名字"); } var my = new Person(); my.say();
讓我們先了解下原型:
首先,每個(gè)函數(shù)都有一個(gè)prototype(原型)屬性,這個(gè)指針指向的就是Person.prototype對(duì)象。而這個(gè)原型對(duì)象在默認(rèn)的時(shí)候有一個(gè)屬性constructor,指向Person,這個(gè)屬性可讀可寫。而當(dāng)我們?cè)趯?shí)例化一個(gè)對(duì)象的時(shí)候,實(shí)例my除了具有構(gòu)造函數(shù)定義的屬性和方法外(注意,只是構(gòu)造函數(shù)中的),還有一個(gè)指向構(gòu)造函數(shù)的原型的指針,ECMAScript中叫[[prototype]],這樣實(shí)例化對(duì)象的時(shí)候,原型對(duì)象的方法并沒有在某個(gè)具體的實(shí)例中,因?yàn)樵蜎]有被實(shí)例。所以這種模式定義的對(duì)象,在調(diào)用方法的時(shí)候過程:調(diào)用my.say();先看實(shí)例中有沒有,有調(diào)之,無追蹤到原型,有調(diào)之,無出錯(cuò),調(diào)用失敗。
上面代碼等同
function Person(name,age){} Person.prototype={ constructor:Person, //必須手動(dòng)設(shè)置這個(gè)屬性,否則沒有實(shí)例共享原型的意義了。 name:"SF", age:25, say:function(){ alert(this.name+"是我的名字"); } } var my = new Person(); my.say();
混合方式 (構(gòu)造函數(shù)+原型)
function Person(name,age) { this.name = name; this.age = age; } Person.prototype.say = function() { alert("我是"+this.name+",今年"+this.age); } var my = new Person("SF","25"); my.say();
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/87029.html
摘要:構(gòu)造函數(shù)模式定義構(gòu)造函數(shù)模式是語言創(chuàng)建對(duì)象的通用方式。但兩種語言用構(gòu)造函數(shù)創(chuàng)建對(duì)象的方式略有不同在中沒有類的概念,函數(shù)即為一等公民,因此,不必顯式聲明某個(gè)類,直接創(chuàng)建構(gòu)造函數(shù)即可,類的方法和屬性在構(gòu)造函數(shù)中或原型對(duì)象上處理。 工廠模式 定義:工廠模式非常直觀,將創(chuàng)建對(duì)象的過程抽象為一個(gè)函數(shù),用函數(shù)封裝以特定接口創(chuàng)建對(duì)象的細(xì)節(jié)。通俗地講,工廠模式就是將創(chuàng)建對(duì)象的語句放在一個(gè)函數(shù)里,通...
使用 函數(shù)聲明 創(chuàng)建函數(shù) 語法: * function 函數(shù)名([形參1,形參2...形參N]){ * 語句... * } */ function fun2(){ console.log(這是我的第二個(gè)函數(shù)~~...
摘要:可以無數(shù)次地調(diào)用這個(gè)函數(shù),而每次它都會(huì)返回一個(gè)包含三個(gè)屬性一個(gè)方法的對(duì)象構(gòu)造函數(shù)模式原型模式組合使用構(gòu)造函數(shù)模式和原型模式創(chuàng)建自定義類型的最常見方式,就是組合使用構(gòu)造函數(shù)模式與原型模式。 JS中創(chuàng)建對(duì)象的主要模式有 工廠模式 工廠模式抽象了具體創(chuàng)建對(duì)象的過程例如 function?createPerson(name,?age,?job){ ????var?o?=?new?Object(...
摘要:本來想把這幾種方法放在同一篇寫的,寫完,已經(jīng)很長了,想想還是分開的比較好。是由團(tuán)隊(duì)開發(fā)的一個(gè)簡(jiǎn)單的以為主為輔的現(xiàn)代文件上傳組件。因?yàn)槭?,就拿著的來用一下選擇文件的按鈕。也可以重寫上傳事件。如果不自動(dòng)上傳的話,可以通過觸發(fā)。 本來想把這幾種方法放在同一篇寫的,寫完xhr,已經(jīng)很長了,想想還是分開的比較好。webuploader是由Baidu WebFE(FEX)團(tuán)隊(duì)開發(fā)的一個(gè)簡(jiǎn)單的以HT...
摘要:本教程解釋了現(xiàn)代中各種各樣的循環(huán)可能性目錄介紹提供了許多迭代循環(huán)的方法。引入了循環(huán),它結(jié)合了的簡(jiǎn)潔性和破解能力注意使用。此循環(huán)在每次迭代中創(chuàng)建一個(gè)新范圍,因此我們可以安全地使用它而不是。 JavaScript提供了許多通過LOOPS迭代的方法。本教程解釋了現(xiàn)代JAVASCRIPT中各種各樣的循環(huán)可能性 showImg(https://segmentfault.com/img/bVbfH...
閱讀 1996·2021-11-24 09:39
閱讀 989·2021-11-11 16:55
閱讀 1443·2021-10-09 09:43
閱讀 1431·2021-10-08 10:17
閱讀 1664·2021-08-25 09:41
閱讀 435·2019-08-30 13:02
閱讀 637·2019-08-29 15:14
閱讀 1014·2019-08-29 13:53