如何在javascript中实现部分继承?

时间:2017-12-07 06:44:42

标签: javascript oop inheritance

我昨天接受采访时,面试官问我部分遗产,我对此毫无头绪。根据我的理解,我在下面提到了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:如何仅继承&#34; setName&#34;功能来自&#34;人&#34;构造函数?有可能吗?

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构造函数到Author构造函数的setName方法。这可能吗?

1 个答案:

答案 0 :(得分:0)

通过阅读您的描述,我不认为您熟悉上下文和this的概念,const OtherClass = function () {}; const MyClass = function () {}; MyClass.prototype.logThis = function () { console.log(this); }; const otherInstance = new OtherClass(); const myInstance = new MyClass(); myInstance.logThis(); // logs myInstance myInstance.logThis.call(otherInstance, 'param1', 'param2'); // logs otherInstance myInstance.logThis.apply(otherInstance, ['param1', 'param2']); // logs otherInstance 是一个可以代表任何对象的通配符。另外值得注意的是,原型链只是一个特定的位置,可以查看属性在类实例上是否未定义。实例只是在运行构造函数后返回的常规对象(通过&#39; new&#39;关键字),其中函数class.prototype.asdf与instance.asdf的功能相同,如果是instance.asdf没有定义

Person.prototype.setName = Author.prototype.setName = function setName () {}

记住这个&#39;这个&#39;的简单方法是 - 无论在点的左边是什么&#39;在执行或调用时间,而不是它写入的函数范围。这就是为什么setTimeout和Promises等其他异步内容不会使用&#39; this&#39;你可能会期待,除非你已经束缚它。

您可以编写一个使用未知操作的通用共享函数,并将其包含在不同的对象中。

WebElement getmenu= driver.findElement(By.xpath("//*[@id='ui-id-2']/span[2]")); //xpath the parent

    Actions act = new Actions(driver);
    act.moveToElement(getmenu).perform();

    Thread.sleep(3000);
    WebElement clickElement= driver.findElement(By.linkText("Sofa L"));//xpath the child
    act.moveToElement(clickElement).click().perform();