getBooks
中定义了函数Author.prototype
。但它不能在Author
对象中使用。当我使用__proto__
继承Person
属性时。为什么Author
对象没有getBooks
函数?这是__proto__
的影响吗?
function Person(name){
this.name = name;
}
function Author(name,books){
Person.call(this,name);
this.books = books;
}
Person.prototype.getName = function(){
return this.name;
}
Author.prototype.getBooks = function() {
return this.books;
}
var john = new Person('John Smith');
var authors = new Array();
authors[0] = new Author('Dustin Diaz',['JavaScript Design Patterns']);
authors[1] = new Author('Ross Harmes',['JavaScript Design Patterns']);
authors[0].__proto__ = new Person();
console.log(john.getName());
console.log(authors[0].getName());
console.log(authors[0].getBooks())
答案 0 :(得分:1)
__proto__
是deprecated。而是在将新的原型方法添加到该类之前,将类的原型分配给您尝试继承的类的新实例。
function Author(name, books) {
Person.call(this, name);
this.books = books;
}
Author.prototype = new Person();
Author.prototype.constructor = Author;
Author.prototype.getBooks = function() {
return this.books;
};
JSFiddle演示:https://jsfiddle.net/bkmLx30d/1/
答案 1 :(得分:0)
您已在authors[0].__proto__ = new Person();
更改了对象的原型,因此Author
中的第一个authors
对象现在有一个设置为Person()
对象的原型。< / p>
当您执行authors[0].getBooks()
时,authors[0]
将在原型中搜索getBooks()
,但由于Person.prototype
没有getBooks()
,因此无法找到它因此给出错误。