关于原型链,要注意以下几个公式:
Function.__proto__ == Function.prototype == Object.__proto__Function.prototype.__proto__ == Object.prototypeObject.prototype.__proto__ == nullfunction.__proto__ == Function.prototypefunction.prototype.__proto__ == Object.prototypeprototype是函数才有的属性,表示该函数的原型__proto__是每个对象都有的属性,表示构造器的原型,即:contrusctor.prototype1、 阅读代码
function Person(name) {this.name = name}var p2 = new Person('king');console.log(p2.__proto__)console.log(p2.__proto__.__proto__)console.log(p2.__proto__.__proto__.__proto__)console.log(p2.__proto__.__proto__.__proto__.__proto__)console.log(p2.__proto__.__proto__.__proto__.__proto__.__proto__)console.log(p2.constructor)console.log(p2.prototype)console.log(Person.constructor)console.log(Person.prototype)console.log(Person.prototype.constructor)console.log(Person.prototype.__proto__)console.log(Person.__proto__)console.log(Function.prototype.__proto__)console.log(Function.__proto__)console.log(Object.__proto__)console.log(Object.prototype.__proto__)
2、 阅读代码
```javascript // a function Foo () { getName = function () { console.log(1); } return this; } // b Foo.getName = function () { console.log(2); } // c Foo.prototype.getName = function () { console.log(3); } // d var getName = function () { console.log(4); } // e function getName () { console.log(5); }
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();
<a name="L7Bsk"></a>### 3、 阅读代码```javascriptvar F = function() {};Object.prototype.a = function() {console.log('a');};Function.prototype.b = function() {console.log('b');}var f = new F();f.a();f.b();F.a();F.b()
4、 阅读代码
function Foo(){Foo.a = function(){console.log(1);}this.a = function(){console.log(2)}}Foo.prototype.a = function(){console.log(3);}Foo.a = function(){console.log(4);}Foo.a();let obj = new Foo();obj.a();Foo.a();
5、 阅读代码
function Dog() {this.name = 'puppy'}Dog.prototype.bark = () => {console.log('woof!woof!')}const dog = new Dog()console.log(Dog.prototype.constructor === Dog && dog.constructor === Dog && dog instanceof Dog)
6、 阅读代码
var A = {n: 4399};var B = function(){this.n = 9999};var C = function(){var n = 8888};B.prototype = A;C.prototype = A;var b = new B();var c = new C();A.n++console.log(b.n);console.log(c.n);
7、 阅读代码
function A(){}function B(a){this.a = a;}function C(a){if(a){this.a = a;}}A.prototype.a = 1;B.prototype.a = 1;C.prototype.a = 1;console.log(new A().a);console.log(new B().a);console.log(new C(2).a);
8、 阅读代码
function Parent() {this.a = 1;this.b = [1, 2, this.a];this.c = { demo: 5 };this.show = function () {console.log(this.a , this.b , this.c.demo );}}function Child() {this.a = 2;this.change = function () {this.b.push(this.a);this.a = this.b.length;this.c.demo = this.a++;}}Child.prototype = new Parent();var parent = new Parent();var child1 = new Child();var child2 = new Child();child1.a = 11;child2.a = 12;parent.show();child1.show();child2.show();child1.change();child2.change();parent.show();child1.show();child2.show();
9、 阅读代码
function SuperType(){this.property = true;}SuperType.prototype.getSuperValue = function(){return this.property;};function SubType(){this.subproperty = false;}SubType.prototype = new SuperType();SubType.prototype.getSubValue = function (){return this.subproperty;};var instance = new SubType();console.log(instance.getSuperValue());

