SORU
27 EKİM 2012, CUMARTESİ


JavaScript referans ile geçmek için mi?

JavaScript başvuruları geçmek veya değerleri tarafından geçmek için mi? İşte bir örnekJavascript: İyi Parçaları. Dikdörtgen işlevi için my parametre hakkında kafam çok karışık. Aslında undefined, ve işlevin içinde yeniden tanımlandı. Orijinal referans yok. Ben fonksiyonu parametre çıkarmak, içine alan işlevini erişmek mümkün değil.

Bir kapatma mı? Ama hiçbir işlevi döndürdü.

var shape = function (config) {
    var that = {};
    that.name = config.name || "";
    that.area = function () {
        return 0;
    };
    return that;
};
var rectangle = function (config, my) {
    my = my || {};
    my.l = config.length || 1;
    my.w = config.width || 1;
    var that = shape(config);
    that.area = function () {
        return my.l * my.w;
    };
    return that;
};
myShape = shape({
    name: "Unhnown"
});
myRec = rectangle({
    name: "Rectangle",
    length: 4,
    width: 6
});
console.log(myShape.name   " area is "   myShape.area()   " "   myRec.name   " area is "   myRec.area());

CEVAP
27 EKİM 2012, CUMARTESİ


İlkel değer geçirilir, Nesne geçti "bir referans kopya".

Bir nesne geçirdiğinizde özellikle (ya da dizi) (görünmez) o nesne için bir başvuru geçirmeden, ve değiştirmek içiniçindekilerbu nesne, ama eğer başvuru üzerine çalışırsanız başvurusu arayan tarafından düzenlenen - yani değeri tarafından geçirilen kendisi referans kopyasını etkilemez:

function replace(ref) {
    ref = {};           // this code does _not_ affect the object passed
}

function update(ref) {
    ref.key = 'newvalue';  // this code _does_ affect the _contents_ of the object
}

var a = { key: 'value' };
replace(a);  // a still has its original value - it's unmodfied
update(a);   // the _contents_ of 'a' are changed

Bir başvuru türü değişen tamamen nesne arayan tarafından iletilen yerini aldığı: C ile karşılaştırın

void replace(mytype& ref) {
    ref = *new mytype();  // ignoring the memory leak for the purposes of this example
}

mytype a;
replace(a);   // a is now a _different_ object

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chuck Testa

    Chuck Testa

    14 AĞUSTOS 2011
  • Missouri Star Quilt Company

    Missouri Sta

    18 ŞUBAT 2009
  • Top Gear

    Top Gear

    27 Mart 2006