JavaScript 상속 확인
11319 단어 JavaScript물려받다
개요
예전에 배웠는데 지식이 흐려져서 다시 조사해 봅시다.
(Backbone.js 공부할 때 등장했으니까...)
샘플 코드
자바스크립트 계승을 진행한 샘플을 만들어 보았습니다.
./src/html/extend.html<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>JavaScriptの継承について</title>
</head>
<body>
<h1>prototypeを使った継承</h1>
<p>オブジェクトを継承してみる。</p>
<script>
// Animalオブジェクト
function Animal(name) {
this.name = name;
}
Animal.prototype.talk = function() {
console.log(this.phrase);
};
// Animal2オブジェクト (static変数あり)
var Animal2 = (function() {
var uid = 0;
return function () {
this.uid = uid;
uid++;
};
})();
// -------------------------------------------------------------------
// オブジェクトの継承
(function() {
// Dogオブジェクト (Animalを継承する)
function Dog(phrase) {
this.constructor('Dog');
this.phrase = phrase;
}
Dog.prototype = new Animal(); // prototype, constructorのコピー (talk関数)
var myDog = new Dog('Hello World.');
myDog.talk(); // → Hello World.
console.log(myDog); // → Dog {name: "Dog", phrase: "Hello World."}
})();
(function() {
// Dog2オブジェクト (Animal2を継承する)
function Dog2() {
this.constructor();
}
Dog2.prototype = new Animal2(); // prototype, constructorのコピー (talk関数)
console.log('dog2(1)', new Dog2()); // dog2(1) Dog2 {uid: 1}
console.log('dog2(2)', new Dog2()); // dog2(2) Dog2 {uid: 2}
console.log('dog2(3)', new Dog2()); // dog2(3) Dog2 {uid: 3}
})();
// -------------------------------------------------------------------
// Object.createメソッド
(function() {
function Dog (phrase) {
Animal.call(this, 'Dog');
this.phrase = phrase;
}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
var myDog = new Dog('Hello World.');
myDog.talk(); // → Hello World.
console.log(myDog); // → Dog {name: "Dog", phrase: "Hello World."}
})();
(function() {
// Dog2オブジェクト (Animal2を継承する)
function Dog2() {
Animal2.call(this);
}
Dog2.prototype = new Animal2();
console.log('dog2(1)', new Dog2()); // dog2(1) Dog2 {uid: 4}
console.log('dog2(2)', new Dog2()); // dog2(2) Dog2 {uid: 5}
console.log('dog2(3)', new Dog2()); // dog2(3) Dog2 {uid: 6}
})();
// -------------------------------------------------------------------
</script>
</body>
</html>
동작 확인
어떤 방법이든 물려받을 수 있을 것 같아.
※ cherome의 확인
총결산
오래된 내용인데 지금은 거의 쓰지 않은 것인데 동작을 확인하려고 써봤어요.
사이트 축소판 그림
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>JavaScriptの継承について</title>
</head>
<body>
<h1>prototypeを使った継承</h1>
<p>オブジェクトを継承してみる。</p>
<script>
// Animalオブジェクト
function Animal(name) {
this.name = name;
}
Animal.prototype.talk = function() {
console.log(this.phrase);
};
// Animal2オブジェクト (static変数あり)
var Animal2 = (function() {
var uid = 0;
return function () {
this.uid = uid;
uid++;
};
})();
// -------------------------------------------------------------------
// オブジェクトの継承
(function() {
// Dogオブジェクト (Animalを継承する)
function Dog(phrase) {
this.constructor('Dog');
this.phrase = phrase;
}
Dog.prototype = new Animal(); // prototype, constructorのコピー (talk関数)
var myDog = new Dog('Hello World.');
myDog.talk(); // → Hello World.
console.log(myDog); // → Dog {name: "Dog", phrase: "Hello World."}
})();
(function() {
// Dog2オブジェクト (Animal2を継承する)
function Dog2() {
this.constructor();
}
Dog2.prototype = new Animal2(); // prototype, constructorのコピー (talk関数)
console.log('dog2(1)', new Dog2()); // dog2(1) Dog2 {uid: 1}
console.log('dog2(2)', new Dog2()); // dog2(2) Dog2 {uid: 2}
console.log('dog2(3)', new Dog2()); // dog2(3) Dog2 {uid: 3}
})();
// -------------------------------------------------------------------
// Object.createメソッド
(function() {
function Dog (phrase) {
Animal.call(this, 'Dog');
this.phrase = phrase;
}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
var myDog = new Dog('Hello World.');
myDog.talk(); // → Hello World.
console.log(myDog); // → Dog {name: "Dog", phrase: "Hello World."}
})();
(function() {
// Dog2オブジェクト (Animal2を継承する)
function Dog2() {
Animal2.call(this);
}
Dog2.prototype = new Animal2();
console.log('dog2(1)', new Dog2()); // dog2(1) Dog2 {uid: 4}
console.log('dog2(2)', new Dog2()); // dog2(2) Dog2 {uid: 5}
console.log('dog2(3)', new Dog2()); // dog2(3) Dog2 {uid: 6}
})();
// -------------------------------------------------------------------
</script>
</body>
</html>
Reference
이 문제에 관하여(JavaScript 상속 확인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/reflet/items/ccc28476e77a50a01f3b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)