-
每个"构造函数"中都有一个默认的属性, 叫做 prototype, prototype属性保存着一个对象, 这个对象我们称之为"原型对象", prototype 指向它的原型对象
function Person(myName, myAge) { // 构造函数 this.name = myName; this.age = myAge; } Person.prototype = { // 原型对象 say: function () { console.log("hello world"); } } let obj1 = new Person("lnj", 34); console.log(Person.prototype); // {say: ƒ}
-
每个"原型对象"中都有一个默认的属性, 叫做constructor, constructor 指向当前原型对象对应的那个"构造函数"
function Person(myName, myAge) { // 构造函数 this.name = myName; this.age = myAge; } Person.prototype = { // 原型对象 // 需要加上这句代码, 否则会破坏原型链 constructor: Person, say: function () { console.log("hello world"); } } let obj1 = new Person("lnj", 34); console.log(Person.prototype.constructor); // ƒ Person(myName, myAge) { // 构造函数 // this.name = myName; // this.age = myAge; // } console.log(Person.prototype.constructor === Person); // true
-
通过构造函数创建出来的对象我们称之为"实例对象", 每个"实例对象"中都有一个默认的属性, 叫做
__proto__
,__proto__
指向创建它的那个构造函数的"原型对象"function Person(myName, myAge) { // 构造函数 this.name = myName; this.age = myAge; } Person.prototype = { // 原型对象 constructor: Person, say: function () { console.log("hello world"); } } let obj1 = new Person("lnj", 34); // 实例对象 console.log(obj1.__proto__); // {constructor: ƒ, say: ƒ} console.log(obj1.__proto__ === Person.prototype); // true