要是实在不知道要干什么,那就喝两杯思路就来了!

导航菜单

JavaScript中的原型链

构造函数 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 中原型的继承。我用画图工具粗略的绘制了一个原型链图。原型链.png

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();



发表评论