1.重新typeOf方法
function myTypeof(a) {
var type = typeof (a);
var toStr = Object.prototype.toString;
var tStr = {
'[object Array]': 'Array',
'[object Object]': 'Object',
'[object Number]': 'Number',
'[object Boolean]': 'Boolean',
'[object String]': 'String'
}
if (a === null) {
return 'null';
} else if (type === 'object') {
var rStr = toStr.call(a)
return tStr[rStr];
} else {
return type;
}
}
2.js中的圣杯模式,原型继承
function prototypeClone(origin, target) {
var buffer = function () {};
buffer.prototype = origin.prototype;
target.prototype = new buffer();
//将需要原型中的constructor属性指向自己本身
target.prototype.constructor = target;
//在原型中创建个属性用来告知继承的是谁的原型
target.prototype.super_class = origin
}
3.对象的深拷贝
function deepClone(origin, target) {
var target = target || {};
var arrType = '[object Array]'
var toStr = Object.prototype.toString;
for (var key in origin) {
//屏蔽掉原型中的属性值
if (origin.hasOwnProperty(key)) {
//判定属性值是不是引用值,而null也是引用值所以需要把null也屏蔽掉
if (typeOf(origin[key]) === 'object' && origin[key] !== null) {
//通过Object的toString方法判断属性值是数组还是对象
if (toStr.call(origin[key]) === arrStr) {
target[key] = [];
} else {
target[key] = {};
}
//递归
deepClone(origin[key], target[key]);
} else {
target[key] = origin[key];
}
}
}
}