使用隱藏的new來創(chuàng)建對象
更新時(shí)間:2011年03月29日 00:17:52 作者:
JQ中發(fā)現(xiàn)的,jQuery.Event類。估計(jì)作者是為了減少代碼量。定義一個(gè)類,但不用new關(guān)鍵字去創(chuàng)建該類對象,而使用方法調(diào)用()方式去創(chuàng)建該對象。
很多時(shí)候我們是這樣寫類,然后使用new創(chuàng)建對象的。
function Person(name,age){
this.name=name;
this.age=age;
}
Person.prototype={
setName : function(n){this.name=n;},
getName : function(){return this.name;}
}
var p = new Person('jack',25);
改成這樣的
function Person(name,age){
//條件改為(this==window)或(this==self)或(this.constructor!=Object)
if(!this.setName){
return new Person(name,age);
}
this.name=name;
this.age=age;
}
Person.prototype={
setName : function(n){this.name=n;},
getName : function(){return this.name;}
}
var p = Person('jack',25);
注意該類較最上面的寫類方式中多了以下
if(!this.setName){
return new Person(name,age);
}
好,創(chuàng)建類的實(shí)例(對象)方式也變成了如下
var p = Person('jack',25);
這種創(chuàng)建方式(函數(shù)調(diào)用)較上面的少了“new_”,new和空格,實(shí)際上是在類內(nèi)部new了。而這樣方式每次創(chuàng)建對象可以減少4個(gè)byte。
如果把類內(nèi)部的if判斷條件換成非prototype上的屬性,如this.name。程序會提示出錯(cuò):too much recursion
function Person(name,age){
if(!this.name){
return new Person(name,age);
}
this.name=name;
this.age=age;
}
Person.prototype={
setName : function(n){this.name=n;},
getName : function(){return this.name;}
}
var p = Person('jack',25);
復(fù)制代碼 代碼如下:
function Person(name,age){
this.name=name;
this.age=age;
}
Person.prototype={
setName : function(n){this.name=n;},
getName : function(){return this.name;}
}
var p = new Person('jack',25);
改成這樣的
復(fù)制代碼 代碼如下:
function Person(name,age){
//條件改為(this==window)或(this==self)或(this.constructor!=Object)
if(!this.setName){
return new Person(name,age);
}
this.name=name;
this.age=age;
}
Person.prototype={
setName : function(n){this.name=n;},
getName : function(){return this.name;}
}
var p = Person('jack',25);
注意該類較最上面的寫類方式中多了以下
復(fù)制代碼 代碼如下:
if(!this.setName){
return new Person(name,age);
}
好,創(chuàng)建類的實(shí)例(對象)方式也變成了如下
復(fù)制代碼 代碼如下:
var p = Person('jack',25);
這種創(chuàng)建方式(函數(shù)調(diào)用)較上面的少了“new_”,new和空格,實(shí)際上是在類內(nèi)部new了。而這樣方式每次創(chuàng)建對象可以減少4個(gè)byte。
如果把類內(nèi)部的if判斷條件換成非prototype上的屬性,如this.name。程序會提示出錯(cuò):too much recursion
復(fù)制代碼 代碼如下:
function Person(name,age){
if(!this.name){
return new Person(name,age);
}
this.name=name;
this.age=age;
}
Person.prototype={
setName : function(n){this.name=n;},
getName : function(){return this.name;}
}
var p = Person('jack',25);
您可能感興趣的文章:
- JS 創(chuàng)建對象(常見的幾種方法)
- JavaScript 三種創(chuàng)建對象的方法
- "automation服務(wù)器不能創(chuàng)建對象”的問題的解決方案總結(jié)大全
- 收集的比較全的automation服務(wù)器不能創(chuàng)建對象 異常原因和解決方法
- JavaScript 創(chuàng)建對象
- js中創(chuàng)建對象的幾種方式示例介紹
- js創(chuàng)建對象的幾種常用方式小結(jié)(推薦)
- C++用new創(chuàng)建對象和不用new創(chuàng)建對象的區(qū)別解析
- JavaScript創(chuàng)建對象的七種方式全面總結(jié)
相關(guān)文章
jquery插件開發(fā)之實(shí)現(xiàn)google+圈子選擇功能
最近項(xiàng)目中用到的一個(gè)效果,類似于Google+的添加圈子功能。本文插件約8成封裝,好多功能是依據(jù)項(xiàng)目中實(shí)際需求寫的。若要使用,可根據(jù)自身情況擴(kuò)展修改2014-03-03jQuery構(gòu)造函數(shù)init參數(shù)分析續(xù)
其實(shí)樓主的F和jQuery.fn.init是相等的; 實(shí)現(xiàn)功能是和jq一樣的, 只是jq的把構(gòu)造函數(shù)放進(jìn)原型;如果非要說原因,個(gè)人理解jq這樣寫整體結(jié)構(gòu)清晰,先是入口構(gòu)造函數(shù),緊跟著是原型部分(原型里面init是初始化),但是不好理解;乍一看確實(shí)挺繞, 我也是看了好久才明白怎么回事2015-05-05jQueryUI寫一個(gè)調(diào)整分類的拖放效果實(shí)現(xiàn)代碼
最近,想用jQuery做一個(gè)網(wǎng)頁的樹目錄結(jié)構(gòu),并且可以使用鼠標(biāo)拖動(dòng)調(diào)整選項(xiàng)的位置。我在網(wǎng)上找了一下插件,基本上看了好幾款比較著名的,都覺得代碼太復(fù)雜了或者界面太丑了等各種不符合我的要求2012-05-05jquery的clone方法應(yīng)用于textarea和select的bug修復(fù)
textarea和select的值clone的時(shí)候會丟掉,在clone的時(shí)候?qū)al再重新賦值一下,如果知道這個(gè)了就加單了2014-06-06jsTree 基于JQuery的排序節(jié)點(diǎn) Bug
jsTree(JQuery) 排序節(jié)點(diǎn) Bug的解決方法。2011-07-07