1. 实现New
function Dog(name) {
this.name = name;
}
Dog.prototype.bark = function() {
console.log('wangwang')
}
Dog.prototype.sayName = function() {
console.log('my name is' + this.name);
}
let wangcai = new Dog('旺财')
wangcai.sayName();
wangcai.bark();
function _new () {
}
let sanmao = _new(Dog, '三毛')
sanmao.bark();
sanmao.sayName();
console.log(sanmao instanceof Dog);
function _new(Ctor, ...params) {
let obj = {};
obj.__proto__ = Ctor.prototype;
let result = Ctor.call(obj, ...params);
if(/^(object|function)$/.test(typeof result)) return result;
return obj;
}
- 优化
- 利用Object.create([obj])
- Object.create 也不兼容 IE678
let pro = {
A: 10,
B: 20
}
console.log(Object.create(pro))

function _new(Ctor, ...params) {
let obj = Object.create(Ctor.prototype)
let result = Ctor.call(obj, ...params);
if(/^(object|function)$/.test(typeof result)) return result;
return obj;
}
Object.create = function(pro) {
function Proxy() {}
Proxy.prototype = pro;
return new Proxy;
}
function _new(Ctor) {
var params = [].slice.call(arguments, 1)
var obj = Object.create(Ctor.prototype)
var result = Ctor.apply(obj, params);
if(/^(object|function)$/.test(typeof result)) return result;
return obj;
}
2. 扩展内置类原型上的方法
function unique(arr) {
let result = new Set(arr);
result = Array.from(result);
return result
}
Array.prorotype.unique = function unique() {
let result = new Set(this);
result = Array.from(result);
return result
}
let arr = [1,2,3,2,3,4,2,3,4,2,3,2,3,4,5,3,4];
let result = arr.sort((a, b) => a - b);
console.log(arr, result)
arr.unique().sort(...)