2016-05-30 11 views
1

Dies ist Prototyp-Modell in Javascript. im Gegensatz zu verwenden Konstruktorfunktion mit neuem Schlüsselwort in diesem Muster verwenden wir vorhandenes Objekt ein neues Objekt zu erstellen, wie untenimplementieren statische, private Mitglieder mit prototypischen Muster in Javascript

var answerprototype = { 

    name:'ss', 
    get:function fn1() 
    { 
     return "--"; 

    } 
} 

var lifeanswer = Object.create(answerprototype); 
gezeigt

dies ist, wie implementieren private, öffentliche Mitglieder in Javascript mit klassischen Mustern

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" 

dies ist, wie in Javascript mit klassischen Muster

01 statische Elemente implementieren
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 

möchte ich statische Mitglieder und private, öffentliche Mitglieder in Javascript mit prototypischen Muster implementieren (nicht neues Schlüsselwort mit Konstruktor-Funktion) , wie es geht

Antwort

0

In JavaScript, privat doesn Ich meine nicht, was du denkst. Sie müssen eine Schließung erstellen, wo Sie Ihre "private" Werte einfangen.

einer Funktion ist die traditionelle Art und Weise einen Verschluss

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 

Mit ES6 zu erstellen, geben Sie den Block-scoped let oder const in Kombination mit der Funktion var etwas ähnliches

;{ 
    let foo = 'bar'; 
    var obj = { 
     get baz() {return foo;} 
    }; 
} 
obj.baz; // "bar" 
foo; // ReferenceError 
erreichen scoped verwenden können

Bitte denken Sie daran, dass, sobald Sie von einem dieser Objekte erben, alle Nachkommen obje cts wird Aktie die gleichen Verweise auf diese Werte, schaffen keine neuen


Ich schrieb ;{ /* ... */ } also, wenn Sie den Code in Ihre Konsole versuchen, es nicht versucht, dieses Muster als Objektliteral zu interpretieren , aber stattdessen ein Codeblock. In der Produktion ist die ursprüngliche ; nicht notwendig.

Verwandte Themen