Javascriptを初めて使用しています。通常Python/PHPを書いてください。現在読んでいるのはJavaScript:The Definitive Guide:あなたのWebページを有効にする(確定ガイド)Javascript:継承テストの問題(JS Definitive Guide bookが提供するコードの問題)
私はそれがうまくいかない理由を理解しようとしています。なぜ可能なかについての詳細な説明は、プロパティ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](https://jsfiddle.net/vpLu0rkh/3/)** –
を参照してください。またはクリックして簡単にクリックできるように、ブラウザコンソールですべてを実行します。 – Will
JSのコードスニペットでこのようにChrome/FFでコンソールを使うことができないことはわかりませんでした。好奇心のために、 'node'を使って端末でこの情報を得る簡単な方法はありますか?私は 'console.log(inherit(p))'を試しても '{}'を返す。 'iPython'私は、すべての変数を見て変数を見てみるために '誰'を使うことができます。 – Josh