javascript - 我在 JavaScript 中对这个原型(prototype)做错了,有什么想法吗?

标签 javascript inheritance prototype-oriented

以下代码不会像我想象的那样生成原型(prototype)。谁能看到我做错了什么吗?

var A = function () {
    return {
        workingTest: function () {return "OK";}
    };
};

A.prototype.notWorkingTest = function () {return "Not so much";};

var a = new A();

a.workingTest(); // "OK"
a.notWorkingTest(); // TypeError: "undefined_method"

有什么想法吗?我认为这是扩展 JS 类的正确方法,但我错过了一些东西。

最佳答案

将 A 更改为

var A = function () {
  this.workingTest = function () {return "OK";};
};

问题是您原来的 A 函数正在创建并返回 Object 的直接实例,而不是使用之前的 A 实例。由 new 运算符创建并绑定(bind)到 this

要理解这一点,请尝试运行

var B = function () { return { x: 42 }; }
var C = function () { this.x = 42; }
var b = new B;
var c = new C;
alert("b.constructor === B : " + (b.constructor === B));  // false
alert("b.constructor === Object : " + (b.constructor === Object));  // true
alert("c.constructor === C : " + (c.constructor === C));  // true

所以因为B返回一个新对象,所以它返回的值不再是instanceof B并且不使用B的原型(prototype).

关于javascript - 我在 JavaScript 中对这个原型(prototype)做错了,有什么想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6613406/

相关文章:

javascript - 记住输入密码对话框,无需重新加载页面

javascript - jQuery on(click) 不起作用,但 on(hover) 起作用

javascript - 如何创建 Object.prototype 克隆

objective-c - 如果我想添加类型化属性,子类化 NSNotification 是正确的途径吗?

python - 无法从继承类将项目添加到字典中

javascript - JavaScript .prototype 是如何工作的?

javascript - 鼠标进入时显示一个div,如果鼠标位置在最右边则看不到

javascript - 调用多个函数 'onClick'

Java方法扩展而不是覆盖