JavaScriptでプロトタイプパターンを使用して静的・プライベート・メンバーを実装 -- javascript フィールド と oop フィールド と static フィールド と prototype-programming フィールド 関連 問題

implement static,private members using prototypal pattern in javascript












1
vote

問題

日本語

これはJavaScriptのプロトタイプモデルです。 新しいキーワードを使用したUSEコンストラクタ関数とは異なり、このパターンで使用しています 以下に示すように新しいオブジェクトを作成する既存のオブジェクト

<事前> <コード> var answerprototype = { name:'ss', get:function fn1() { return "--"; } } var lifeanswer = Object.create(answerprototype);

これは、古典的なパターンを使用してJavaScriptのプライベートメンバーの実装方法です

<事前> <コード> function Restaurant() { //private varible var myPrivateVar = 'aaa'; //public variable this.myPublicVar = 'bbbb' //private method // Only visible inside Restaurant() var private_stuff = function() { return "private metho"; } //public method // use_restroom is visible to all this.use_restroom = function() { return "public method" } } //create object var r1 = new Restaurant(); r1.myPrivateVar //return undefined r1.myPublicVar //return "bbbb" r1.private_stuff() //error r1.use_restroom() //return "public method"

これは、古典的なパターンを使用してJavaScriptの静的メンバーの実装方法です。

<事前> <コード> function Shape(shapeName) { //instance field this.ShapeName = shapeName; //static field Shape.Count = ++Shape.Count; //static method Shape.ShowCount = function() { return Shape.Count; } } var shape1 = new Shape("circle"); var shape1 = new Shape("rectangle"); var shape1 = new Shape("Triangle"); Shape.ShowCount(); //return 3

プロトタイプパターンを使用したJavaScriptで静的メンバーとプライベートメンバーを実装したい(コンストラクタ関数を使用して新しいキーワードを使用しない) それをやる方法

英語

this is prototypal model in javascript. unlike use constructor function with new keyword in this pattern we are using existing object to create a new object as shown below

var answerprototype = {      name:'ss',     get:function fn1()     {         return "--";      } }  var lifeanswer = Object.create(answerprototype); 

this is how implement private ,public members in javascript using classical pattern

function Restaurant() {     //private varible     var myPrivateVar = 'aaa';      //public variable     this.myPublicVar = 'bbbb'         //private method     // Only visible inside Restaurant()     var private_stuff = function()        {         return "private metho";     }      //public method     // use_restroom is visible to all     this.use_restroom = function()        {         return "public method"     }  }  //create object var r1 = new Restaurant();  r1.myPrivateVar //return undefined r1.myPublicVar  //return "bbbb" r1.private_stuff() //error r1.use_restroom() //return "public method" 

this is how implement static members in javascript using classical pattern

function Shape(shapeName) {    //instance field    this.ShapeName = shapeName;     //static field    Shape.Count = ++Shape.Count;     //static method    Shape.ShowCount = function()    {     return Shape.Count;     }  }  var shape1 = new Shape("circle"); var shape1 = new Shape("rectangle"); var shape1 = new Shape("Triangle");   Shape.ShowCount();    //return 3 

i want to implement static members and private ,public members in javascript using prototypal pattern(not using new keyword with constructor function) how to do it

</div
           

回答リスト

0
 
vote

JavaScript、private はあなたがそれが何を意味すると思うのかを意味しません。 "private" 値を閉じ込める場所であるクロージャーを作成する必要があります。

機能を使用することは、クロージャーを作成するための伝統的な方法です

<事前> <コード> function makeProto(chainTo) { const secret = 'foo'; return Object.assign(Object.create(chainTo || null), { get hello() {return secret;} }); } let fizz = makeProto(); fizz.hello; // "foo" Object.prototype.hasOwnProperty.call(fizz, 'hello'); // true

ES6を使用すると、ブロックスコープ<コード> 99887666 OR <コード>または<コード>または<コード>または<コード>は、関数スコープ<コード> var と組み合わせて使用​​して、類似のものを実現できます。 Plain <事前> <コード> ;{ let foo = 'bar'; var obj = { get baz() {return foo;} }; } obj.baz; // "bar" foo; // ReferenceError


これらのオブジェクトの1つから継承するとすぐに、すべての子孫オブジェクトはこれらの値への同じ参照を参照して、新しいものを作成しない

を作成しないことを忘れないでください。

私は ;{ /* ... */ } を書いたので、このパターンをオブジェクトリテラルとして解釈しようとしていませんが、代わりにコードとして解釈しようとしません。ブロック。生産では、初期<コード> var icons = ["http://maps.google.com/mapfiles/ms/icons/yellow.png", "http://maps.google.com/mapfiles/ms/icons/red.png", ...etc ]; 0 は必要ありません。

 

In JavaScript, private doesn't mean what you think it means. You have to create a closure which is where you trap your "private" values.

Using a function is the traditional way to create a closure

function makeProto(chainTo) {     const secret = 'foo';     return Object.assign(Object.create(chainTo || null), {         get hello() {return secret;}     }); }  let fizz = makeProto(); fizz.hello; // "foo" Object.prototype.hasOwnProperty.call(fizz, 'hello'); // true 

With ES6, you can use the block-scoped let or const in combination with the function scoped var to achieve something similar

;{     let foo = 'bar';     var obj = {         get baz() {return foo;}     }; } obj.baz; // "bar" foo; // ReferenceError 

Please remember that as soon as you inherit from one of these objects, all descendant objects will share the same references to these values, not create new ones


I wrote ;{ /* ... */ } so if you try the code in your console it doesn't attempt to interpret this pattern as an Object literal, but instead a code block. In production the initial ; is not necessary.

</div
 
 

関連する質問

0  XMLDocumentのJavaScriptサブクラスは機能しません  ( Javascript subclass of xmldocument doesnt work ) 
プロトタイプを作成しようとしました(私はそれが呼ばれているもの)&amp; JavaScriptで継承を実行します。うまくいけば、それはJavaScriptの規則に従います。 それがうまくいくように変更されるべきです。そのため、その正しいJavaScriptコ...

1  JavaScriptプロトタイプのベストプラクティス  ( Javascript prototype best practices ) 
サブクラスからメインクラスへのメソッドを実行しようとしています。 このコードで動作しますが、それをするのに最適な方法があります(パラメータの "_parent"を使用しないでください)? あなたの助けのためにたくさんありがとう! ==&gt。 https:...

171  JavaScriptのプロトタイプの継承を理解する  ( Understanding prototypal inheritance in javascript ) 
私はJavaScriptのOOPに新しくあります。次のコードブロックの間の違いを説明できますか?テストし、両方のブロックが機能します。ベストプラクティスとなぜですか? 最初のブロック: <コード> function Car(name){ t...

9  JavaScriptにおける継承モデリングの長所と短所?  ( Pros and cons of inheritance modeling in javascript ) 
JavaScriptにクラスがないことを認識しており、古典的なOOP継承を持つように構築されていません。しかし、私はそのようなパターンを見つけました。理想的にはJavascriptの柔軟性の最良の部分を活用しながら、そのような行動をモデル化するための簡単な方...

22  JavaScriptプロトタイプの継承の短所、それらは何ですか?  ( The disadvantages of javascript prototype inheritance what are they ) 
私は最近href="http://www.yuiblog.com/blog/2010/02/03/video-crockonjs-1/1ledusodrockonjs-1/2.REL="nofollow"> Douglas CrockfordのJavaScri...

90  JavaScript Prototype関数での「これ」への参照を保持する[DUPLICATE]  ( Preserving a reference to this in javascript prototype functions ) 
この質問はすでにここで回答を持っています コールバック内の正しい `this`にアクセスする方法? (12回答) ...

6  JavaScriptでクラスを構築する正しい方法は?  ( Correct way to build classes in javascript ) 
私はJavaScriptに新しく、クラスを書くべき方法を理解しようとしています(JavaやC ++などの通常の 'oo言語の私の背景)。 私は2つの選択肢があることを理解しています: 私のクラスがプライベートメソッドとメンバーを持っている場合は、プロトタイ...

0  コンストラクタ/プロトタイプパターンの組み合わせがオブジェクトであるのはなぜですか?  ( Why does combination constructor prototype pattern return typeof being object ) 
このコンストラクタ/プロトタイプパターンを使用するときにmyObjectのインスタンスでmyObjectを返さないのは、TypeOfがMyObjectのインスタンスでmyObjectを返しないのかを理解しています - MyObjectのプロトタイプのプロトタ...

30  そのプロパティだけではなく、JavaScript Prototypeオブジェクトを割り当てることができますか?  ( Is it ok to assign the javascript prototype object instead of just its propertie ) 
JavaScriptでは、関数のプロトタイプにプロパティを割り当てるか、プロトタイプオブジェクトを直接設定できます。 <事前> <コード> var MyClass = function() { }; // The "property" form... My...

9  object.getPrototypeOf()JavaScriptのObject.Constructor.prototypeと同じですか?  ( Is object getprototypeof same as object constructor prototype in javascript ) 
Object.getPrototypeOf(obj) および obj.constructor.prototype の差はありますか?それともこれら2つは同じことを参照していますか? ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有