一箱蟆、javascript實(shí)現(xiàn)繼承
1.基于原型鏈實(shí)現(xiàn)繼承
function base(cl,sup,args){
cl.constructor.prototype.__proto__ = sup.prototype;
sup.apply(cl,args);
}
//這種方法比較適用
2.基于屬性和方法復(fù)制實(shí)現(xiàn)繼承
function base1(cl,sup,args){
var o = {};
var clp = cl.constructor.prototype;
var spp = sup.prototype;
for(var l in clp){
if(clp[l]){
o[l] = 1;
}
}
for(var k in spp){
if(!o[k]){
clp[k] = spp[k];
}
}
sup.apply(cl,args);
}
二、javascript類型判斷
function type(o){
return Number.isNaN(o)?"NaN":Object.prototype.toString.call(o).slice(8,-1);
}
能判斷這些類型
Object
Date
String
Boolean
Number
NaN
Null
Undefined
Error
RegExp
Function
三导犹、javascript對象的深復(fù)制
function clone(obj){
if(typeof(obj) != 'object'){
return obj;
}
var cloneOne = {};
cloneOne.__proto__ = obj.constructor.prototype;
for(var prop in obj){
if(obj.hasOwnProperty(prop)){
cloneOne[prop] = clone(obj[prop]);
}
}
return cloneOne;
}
//能完全深復(fù)制一個(gè)對象,且保證對象的繼承關(guān)系
注:請不要用此函數(shù)去復(fù)制html標(biāo)簽,因?yàn)镠TMLElement對象的屬性都是不允許沒有實(shí)現(xiàn)Element接口的對象調(diào)用的。所以這種方法是復(fù)制不了的,除非不保持它的繼承關(guān)系,純粹復(fù)制屬性的值才可以.
四、javascript數(shù)組去重
//對象鍵值對法
function unique3(array){
var n = {},r = [],len = array.length,val,type;
for(var i = 0;i < len;i++){
val = array[i];
type = typeof val;
if(!n[val]){
n[val] = [type];
r.push(val);
}else if(n[val].indexOf(type) < 0){
n[val].push(type);
r.push(val);
}
}
return r;
}
//這種方法是已知最快的數(shù)組去重方法,當(dāng)占用空間較大
//優(yōu)化遍歷數(shù)組法
function unique5(array){
var r = [];
for(var i = 0,l = array.length;i < l;i++){
for(var j = i + 1;j < l;j++){
if(array[i] === array[j]) {
j = ++i;
}
}
r.push(array[i]);
}
return r;
}
//比直接比較下標(biāo)和比較值速度快點(diǎn)
五报腔、javascript設(shè)置get,set屬性
function Persion(){
var name = "dun";
Object.defineProperty(this,"name",{
get:function(){
return "get " + name;
},
set:function(value){
name = value + "set";
}
});
}
var persion = new Persion();
persion.name = "hui";
console.log(persion.name);
六、javascript html元素相關(guān)
Object--->EventTarget--->Node--->Element---->HTMLElement--->
1.HTMLParagraphElement
2.HTMLDivElement
......
每個(gè)html元素都是HTMLElement的子類的實(shí)例
這是谷歌瀏覽器和火狐瀏覽器的實(shí)現(xiàn)