javascript - 向继承类添加非继承函数 - Javascript

标签 javascript jquery inheritance

我是 Javascript 面向对象编程的新手。昨天我读到了 javascript 中的 prototypeprototype.constructor 以及它们如何在 Javascript 继承中发挥作用。

我创建了一个 JavaScript 函数,继承自父函数之一。但我希望这个子函数的一些方法不被它的子函数继承。

也就是说,

function A //parent
|
|`callA()
 `makeA()

这是主要的父类。

function B //child of A
|
|` callB() //can be inherited
|` makeB() //cannot be inherited
|` callA() //inherited
 ` makeA() //inherited

B 是我想编写的子函数。

function C //child of B
|
|` callC();
|` makeC();
|` callB();
|` callA();
 ` makeA();

我是这样写的:

function A(){}
A.prototype.callA = function()
{
    alert('CallA');
}
A.prototype.makeA = function()
{
    alert('makeA');
}

function B(){
    function makeB(){    //This is not working I am not able to call makeB with B's object
        alert('makeB'); 
    }   
}
B.prototype = new A();
B.prototype.constructor = B;
B.prototype.callB = function()
{
    alert('callB');
}
function C(){}
C.prototype = new C();
C.prototype.constructor = C;
C.prototype.callC = function()
{
    alert('callC');
}
C.prototype.makeC = function()
{
    alert('makeC');
}

$(document).ready(function(){
    var b = new B();
    var c = new C();
    $(document).click(function(){
        c.callB();
        c.callC();
        b.callB();
        b.makeB(); //not being called
    });
});

这部分在JS继承中怎么做。派生对象的私有(private)函数。

最佳答案

您可以做的一件事是将 makeB 方法添加到您的实例中,作为 B 构造函数的一部分,而不是将其放入将从 C 继承的原型(prototype)中:

function B(){
   this.makeB = function(){
     //..
   };
}

但是,要实现此功能,您需要使用 Object.createe 直接从父原型(prototype)继承,而不是从父类的实例继承:

B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;

IE8 不支持 Object.create,因此您可能需要为其找到一个填充程序。

http://kangax.github.io/es5-compat-table/#Object.create

<小时/>

也就是说,我冒昧地说我的建议可能不是解决问题的最佳方法。

第一种选择是将这些隐藏方法公开。您确定要经历隐藏它们的麻烦吗?

第二种选择是简单地使用静态函数作为私有(private)方法:

function makeB(obj){
    obj.callB();
}

关于javascript - 向继承类添加非继承函数 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21507093/

相关文章:

java - 如何在 java 子类中添加两个变量以作为一个变量传递给父类(super class)?

c++ - 使用继承的成员运算符而不是免费的成员运算符

javascript - Safari iOS7 : Bottom bar can't be hidden when using -webkit-overflow-scrolling: touch;

javascript - 在iframe src上设置动态高度参数

php - .live 和 ajax 的问题

Ajax 在 ASP MVC3 站点上返回 404 错误

vba - MS Access 中 VBA 代码的继承

javascript - 如果值大于,则 knockout js隐藏按钮

javascript - 如何在 bootstrap 4 中提交表单

javascript - 限制 Javascript 打印输出中的字符