gpt4 book ai didi

JavaScript 继承?也有私有(private)变量和方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:37:34 25 4
gpt4 key购买 nike

为什么我需要继承另一个类。

父级有私有(private)变量“_data”和私有(private)方法“_test”以及公共(public)方法“add”现在 child 有一个公共(public)方法“add”,它使用来自父“_test”的私有(private)方法和私有(private)变量“_data”。

我该怎么做?

var Parent = function(){
var _data = {};
var _test = function(){alert('test')};
this.add = function(){alert('add from parent')}
}

var Child = function(){
this.add = function(){// here uses the _data and _test from the Parent class
alert('add from child')
}
}

// something to inherent Child from Parent
// instance Child and use the add method

而且我认为我错过了原型(prototype)概念 (Javascript inheritance)

最佳答案

通常,在 JavaScript 中进行继承的方式是将 Child 类的原型(prototype)属性分配给 Parent 对象的实例。因此,您将为 Child 定义构造函数:

function Child() {/* 初始化 yadda yadda */}

然后这样做:

Child.prototype = new Parent();

这或多或少等同于其他语言中的 Class Child extends Parent -- Child 然后拥有方法、成员,并通过闭包获得 Parent 对象的私有(private)成员。

这里有几个棘手的问题。其中之一是在构造函数中完成的初始化。在 Child 构造函数中显式调用 Parent 构造函数 ( function Child() { Parent(); }) 似乎是最明显的策略,但由于 this 从初始化处理并返回(在函数 Parent 中,this 是什么?)。您可以使用 Function(每个函数都可以访问)的 apply 方法解决此问题:

函数 Child() {
Parent.apply(这个,参数);
//Child 独有的初始化在这里
}

(有关申请的更多信息,请参阅 http://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Function/apply)

但我通常这样做的方式是将类的所有初始化分解为一个单独的“init”函数,该函数有点取代了构造函数。

function Parent() { this.init(); }



Parent.prototype.init = function () {/* 初始化 yadda yadda */}

这样,它就可以简单地与其他所有东西一起继承......或者我可以编写一个新的调用旧的,如果我愿意的话:

Child.prototype.init = function () {
Parent.prototype.init.apply(this,arguments);
/* 在这里插入子构造函数独有的东西 */
}

另一个棘手的问题是访问Parent 的私有(private)成员。你不能这样做,真的,除非通过 Parent 的方法。它们是真正私有(private)的,而不是“ protected ”,“子类”只能通过它们继承的方法才能看到它们。有一些方法可以解决这个问题,但这可能是另一个 Q/A,最简单的方法是确保您设计好 Parent

关于JavaScript 继承?也有私有(private)变量和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2741376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com