构造函数 Function 和 Object 都有一个属性和方法的集合叫 prototype,这个 prototype 下有一个方法叫做 contructor,这个方法又指向了其 prototype 方法的携带者 Function 或 Object。这就是原型最基本的雏形。那么原型链的继承又是什么意思呢?比如说 Function 的原型 prototype 下有一个方法 foo(),那么通过 Function 构造出来的对象是可以直接访问到 foo() 方法的,新的对象下的隐式原型 __proto__ 下所有的属性和方法都是从 Function 构造函数的原型 prototype 上继承来的。
Function.prototype.constructor == Function // true Object.prototype.constructor == Object // true Function.prototype.__proto__.constructor == Object // true Object.__proto__.constructor == Function // true
Function Person() {}
Person.prototype.adress = 'Beijing';
var student = new Person();
student.name = 'Tom';
console.log(student.address); // 'Beijing'上面的两个例子简单的说明了 JavaScript 中原型的继承。我用画图工具粗略的绘制了一个原型链图。
PS:最后脑被一道原型链填坑题,猜猜可能会输出什么样的结果!(2019.05.18)
function Foo () {
getName = function () {
console.log(1);
}
return this;
}
Foo.getName = function () {
console.log(2);
}
Foo.prototype.getName = function () {
console.log(3);
}
var getName = function () {
console.log(4);
}
function getName () {
console.log(5);
}
// 输出结果
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo.getName();
new new Foo().getName();
发表评论