gpt4 book ai didi

Javascript:访问原型(prototype)的公共(public)方法不起作用

转载 作者:行者123 更新时间:2023-11-30 18:36:06 25 4
gpt4 key购买 nike

我想用 Javascript 创建一个只有一个公共(public)函数的简单类,如下所示:

function A(myTitle) { 
var title = "";
this.getTitle = function() {
return title;
};
title = myTitle;
};

var anInstance = new A("first");
console.log("anInstance.getTitle(): '"+anInstance.getTitle()+"'");
// expecting to return "first"

这确实按预期工作。

现在我想将此类作为原型(prototype)添加到一个新类中,其中包含一个新的标题变量,以便 getTitle() 方法返回该变量的值:

var myA = new Object();
myA.title ="second";
myA.prototype = anInstance;
console.log("myA.getTitle(): '"+myA.getTitle()+"'");
// expecting to return "second"

但它不是预期的“第二个”,而是导致以下错误:

TypeError: 'undefined' is not a function (evaluating 'myA.getTitle()')

这个函数访问有什么问题?

更新:我的问题的关键点如下:在我的应用程序中,我将创建数千个“A”类型的实例和更多其他类似类型。因此内存效率和性能确实很重要。所以我认为只创建一次相应的方法(接下来还会有几个,getTitle 只是一个例子)并且“数据对象”引用这些方法会很棒。这可能吗?

最佳答案

如果您想要的只是实例变量(这就是我看到您使用的所有内容),那么惯用的 JavaScript 有什么问题:

function A(title) { 
this.title = title;
};

A.prototype.getTitle = function() {
return this.title;
};

var anInstance = new A("first");
var myA = new A("second");

您可以在 JavaScript 之上实现类似 Self-like 原型(prototype)的 OO 和类似 Smalltalk 的基于类的 OO,但这仅在继承层次结构的情况下有意义,其中 JS 的平面模型(有利于组合而不是继承 - 它是很容易向原型(prototype)或 apply() 任意构造函数添加新方法,但您必须跳过一些步骤才能使继承正常工作)是不够的。

至于为什么你的代码不能工作:你的getTitle()方法返回一个词法变量而不是一个实例变量,它不参与通过原型(prototype)链进行的属性解析,因此不能以您的方式被覆盖;还有,.prototype是构造函数的属性,用于初始化新创建实例的内部[[Prototype]] 属性 - 设置 .prototype在一般对象上对属性解析没有任何影响。

关于Javascript:访问原型(prototype)的公共(public)方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8151222/

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