以下代码不会像我想象的那样生成原型(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/