Array object 原型
proto 复杂类型都会有这个 这是一般意义上的原型 比如 Array Object 都会有__proto__
而原型链就是查找的过程 比如Array proto 身上没有一个特定的方法 它会去 proto 的__proto__ 上查找 一直找直到__proto__ 为null,最顶层为null。
prototype是一个属性
var arr = [1, 2, 3, 2, 3]
Array.prototype.unique = function () {
var brr = [];
var obj = {};
for (let i = 0; i < this.length; i++) {
if (!obj[this[i]]) {
obj[this[i]] = true;
brr.push(this[i]);
}
}
return brr;
}
console.log(arr);
构造函数的原型
构造函数有个属性prototype ,prototype让你自己写,对构造函数属性prototype
的操作,最终会反应到该构造函数的实例上。
function Fn(){
this.name = "CJF"
}
Fn.prototype.name="CJF1";
Fn.prototype.getName = function(){
return this.name;
}
var f = new Fn();
f.name;//输出 'CJF'
f.getName(); //输出 'CJF'
Fn.prototype.getName();//输出 'CJF1'
f是构造函数的实例 f有__proto__ 属性 指向 Fn的原型prototype
当对象自身属性和原型属性相同时,自身属性优先级高于原型属性,但是当对象自身没有我们要访问的属性或者方法时,就会沿着创建当前对象的构造函数的原型(原型链)查找要访问的属性,一旦查找到就返回对应属性,没查找到对应属性返回undefined,但是没查找到要访问的方法会报错(因为没有该方法却还要执行该方法所以报错)