Category Archives: Javascript

値渡し、値参照

値渡し

プリミティブ型は値渡しとなる

var value1 = 1
var value2 = value1
value1 = 2

// 1が返る(値渡し)
console.log(value2)

値参照

オブジェクトの時は値参照となる

var Value = function(value) {
  this.value = value
}

var value1 = new Value(1)
var value2 = value1
value1.value = 2

// 2が返る(値参照)
console.log(value2.value)

参考

http://qiita.com/migi/items/3417c2de685c368faab1

コンストラクタ内のローカルファンクション

コンストラクタ内でしか使わないメソッドは、「this」で定義する必要はない

var Test = function(value) {
  this.value = value;

  var editValue = function(value) {
    value = value*2;
    return value;
  }

  this.showValue = function() {
    value = editValue(this.value)
    alert(value);
  }
}

var test = new Test(5);
test.showValue();

コンストラクタ継承 prototype設定

var utilities = {
  age: 35
}

// コンストラクタ定義
var Human = function() {
  this.sayAge = function() {
    alert(this.utilities.age)
    // alert("hello")
  }
}

// コンストラクタ設定
var Base = function() {
  this.sayHello = function(){alert("hello")}
}

// 継承
Human.prototype = new Base();

// プロトタイプ設定 (注意:継承の前にプロトタイプ設定するとエラー)
Human.prototype = {
  utilities: utilities
}

var human = new Human()
human.sayAge();

オブジェクト

// jsでのオブジェクトは以下のような{}で囲まれたもの
var profile = {
  name: "yohei" ,
  age: 35 ,
  sayHello: function(){alert("hello")}
}
alert(profile.name)
profile.sayHello();

// コンストラクタを使って上記オブジェクトを生成できる
var Profile = function(name, age) {
  this.name = name ,
  this.age = age ,
  this.sayHello = function(){alert(this.name)}
}
var profile = new Profile("yohei", 35)
profile.sayHello()

プロトタイプチェーン

// コンストラクタ
var Human = function() {
  this.basic = {
    country: "Japan" ,
    company:  "R"
  }
  this.sayHello = function(){alert(this.name)}
}

var Profile = function(name, age) {
  this.name = name ,
  this.age = age ,
  this.sayName = function(){alert(this.name)}
  this.sayCountry = function(){alert(this.basic.country)}
}

// 継承
Profile.prototype = new Human()

// オブジェクト生成
var profile = new Profile("yohei", 35)

// 継承したメソッド実行
profile.sayHello()

// 継承したプロパティを使ってメソッド実行
profile.sayCountry()