【发布时间】:2017-12-08 20:53:49
【问题描述】:
我是 Javascript 新手。通常写 Python/PHP。目前正在阅读 JavaScript:权威指南:激活您的网页(权威指南)。
使用的部分示例代码我试图弄清楚为什么它不起作用,如果可能的话,详细解释为什么也可以在属性 getter/setter 和继承下方。
我正在使用的功能:
function inherit(p) {
if (p == null) throw TypeError();
if (Object.create) return Object.create(p);
var t = typeof p;
if (t !== "object" && t !== "function") throw TypeError();
function f() {};
f.prototype = p;
return new f();
}
var p = {
x: 1.0,
y: 1.0,
get r() {
return Math.sqrt(this.x*this.x + this.y*this.y);
},
set r(newvalue) {
var oldvalue = Math.sqrt(this.x*this.x + this.y*this.y);
var ratio = newvalue/oldvalue;
this.x *= ratio;
this.y *= ratio;
},
get theta() { return Math.atan2(this.y, this.x); }
};
当我运行测试时。我看不到任何被继承的东西。
> var q = inherit(p)
undefined
> q
{}
> p
{ x: 1, y: 1, r: [Getter/Setter], theta: [Getter] }
这是为什么?我目前在 Mac 上使用node v6.11.3 来运行它。
更新:
发现了如何显示对象中的所有值。将enumerable:True 设置为对象将自动显示所有值。我试图弄清楚该怎么做。对于也使用Node.js 的任何人。
【问题讨论】:
-
代码可以正常工作。您没有正确查看完整结果。如果您登录
q,您将看到所有继承的属性。您看到的{}正是控制台告诉您从inherit(p)返回对象的方式。将console.log(inherit(p))添加到代码底部并运行它。另外,请参阅此 Fiddle -
是的。或者在您的浏览器控制台中运行整个程序,以便轻松点击。
-
没有意识到我可以像这样在 JS sn-ps 代码中使用 Chrome/FF 中的控制台。出于好奇,在使用
node时,是否有任何简单的方法可以在终端中获取此信息?我试过console.log(inherit(p))仍然给{}。iPython我可以使用 'who' 来查看所有变量并快速查看它们的变量。 -
使用
util.inspect()讨论 here -
这太好了,谢谢。
标签: javascript node.js inheritance