【发布时间】:2017-12-07 06:44:42
【问题描述】:
我昨天参加了一次面试,面试官问我关于部分继承的问题,我对此一无所知。根据我的理解,我在下面提到了 2 个代码块。让我知道我所做的一切对于部分继承是否正确。
代码块 1:我们可以称之为部分继承吗?
var Person = function(){}
Person.prototype.getName = function(){
return this.name;
}
Person.prototype.setName = function(name){
this.name = name;
}
var Author = function(name, books){
this.books = books;
Person.prototype.setName.call(this, name); <<---- Is this a way of doing partial inheritance?
}
Author.prototype.getBooks = function(){
return this.books;
}
var author = new Author('Auth1', ['b1','b2']);
代码块 2:如何仅从“Person”构造函数继承“setName”函数?有可能吗?
var Person = function(){
this.setName = function(name){
this.name = name;
};
}
Person.prototype.getName = function(){
return this.name;
}
var Author = function(name, books){
this.books = books;
}
Author.prototype.getBooks = function(){
return this.books;
}
var author = new Author('Auth1', ['b1','b2']);
请解释以上2个代码块的真实性吗?
我什至不知道上面引用的例子是否正确。如果它们不正确,请说明 JavaScript 中的部分继承。
问题:我只想从 Person 构造函数继承 setName 方法到 Author 构造函数。这可能吗?
【问题讨论】:
-
你可以在这里找到非常清晰的解释:w3schools.com/js/js_object_prototypes.asp
-
这里没有谈到部分继承。它存在还是不存在?如果不是,那么面试官可以在什么情况下提出这个问题?
-
当你说“继承”函数时,你真正的意思是得到一个使用
this(未绑定)的函数。如果你bind某事,this将被实际实例对象替换,并且不再是可以在任何上下文中调用的泛型类方法。call和apply之间的区别在于apply与arguments和arrays一起使用(注意它们都以'a' 开头) -
我以前从未听说过“部分继承”这个词。
-
为什么
setName是在Person构造函数中创建的,而不是作为Person.prototype的常规方法?它甚至不使用构造函数范围内的任何东西。
标签: javascript oop inheritance