__proto__原来获取或设置当前对象的prototype(原型)对象。 因为__proto__是一个内部属性,不是一个正式的对外的API,所以在操作原型对象时应该使用Object.getPrototypeOf()代替读取操作,使用
__proto__原来获取或设置当前对象的prototype(原型)对象。
因为__proto__是一个内部属性,不是一个正式的对外的API,所以在操作原型对象时应该使用Object.getPrototypeOf()代替读取操作,使用Object.setPrototypeOf()代替设置操作。
1 // Person 2 function Person (name) { 3 this.name = name; 4 } 5 Person.prototype.sayName = function() { 6 console.log(this.name); 7 }; 8 // Student 9 function Student(school) { 10 this.school = school; 11 } 12 Student.prototype.saySchool = function() { 13 console.log(this.school); 14 } 15 16 let studenta = new Student(‘NT‘); 17 // 使用__proto__进行读取操作 18 console.log(studenta.__proto__); // { saySchool: [Function] } 19 // 使用getPrototypeOf进行读取操作 20 console.log(Object.getPrototypeOf(studenta)); // { saySchool: [Function] } 21 console.log(‘saySchool‘ in studenta) 22 // 使用__proto__进行设置操作 23 studenta.__proto__ = Person.prototype; 24 console.log(‘saySchool‘ in studenta); 25 // 使用setPrototypeOf进行设置操作 26 Object.setPrototypeOf(studenta, Student.prototype) 27 console.log(‘saySchool‘ in studenta);