【发布时间】:2015-11-13 02:51:23
【问题描述】:
首先,这个问题与这个网站上的其他几个问题非常相似。我已阅读它们,但仍有疑问
这两个帮助,但并没有让我一路走好:
我有一个 javascript 框架/库的基本设置:
(function(global){
var TMath = function() {
return new TMath.init();
}
TMath.prototype = {
add: function(a, b) {
return a+b;
}
};
TMath.init = function(){};
TMath.init.prototype = TMath.prototype;
global.TMath = global.$$ = TMath;
})(window);
当我这样运行它时:
var test = $$()
console.log(test);
我在控制台中看到以下内容:
我不明白的是:
如果我 console.log 输出 test.__proto__,我会得到 Object{}。
我不应该得到TMath.Init.prototype,因为那是function constructor 我的test 实例是用它创建的吗?
这是一个确实发生这种情况的示例:
function Person(name){
this.dob = dob
};
var person = new Person("name");
console.log(person.__proto__);
这会输出Person{},而不是 Object{}
【问题讨论】:
-
var test = $$()=>var test = TMath();然后你从new TMath.init();得到一个新对象,它的原型是TMath.prototype,所以test.__proto__是TMath.prototype,也就是objectadd方法,有什么问题? -
避免jQuery antipattern :-)
-
嗯,
TMath.Init.prototype是Object{}?同样是=== TMath.prototype;,那么控制台应该如何知道要显示哪个名称? 名称没有任何意义。 尤其是在您寻找对象身份时。 -
这些是同一个东西,控制台只是给它一个通用名称,
$$().__proto__ === $$.prototype; // true -
@Bergi 好的 - 很酷。命名的东西让我有点困惑:)
标签: javascript prototype prototypal-inheritance