[Actionscript] About prototype
- ๋ฅ์ง
- Development
- ๋ถ๋ฅ
- ETC
- ๋ฑ๋ก์ผ
- 2019-06-30 04:50:12
- ์กฐํ์
- 817
- ์ข์์
- 0
ํด๋์ค ๊ฐ์ฒด๋ ํจ์๊ฐ์ฒด๋ฅผ ์ปจํธ๋กค ํ ์ ์๋๊ฒ์ด prototype๊ฐ์ฒด์ด๋ค. ์ฌ์ฉ๊ตฌ์กฐ๋ ์๋์ ๊ฐ๋ค.
ObjectName.prototype.valueName = "value";
ObjectName.prototype.methodName = function() { };
as2.0์์๋ MovieClip.prototype.methodName = function() { }์ผ๋ก ์ฌ์ฉํด์๋๋ฐ ํํ๋ ๋์ผํ๋ค.
์ฌํ๊น์ง๋ MovieClip์ด๋ String๊ฐ์ ๊ธฐ๋ณธ๊ฐ์ฒด๋ฅผ ํตํ์ฌ prototype๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ instance.methodName(); ํํ๋ก ํธ์ถํ๋ค. ์ญ์๋ as2.0์ด๋ 3.0์ด๋ ์ฌ์ฉํํ๋ ๋์ผํ๋ค.
ํ์ฉ ํํ๋ ์๋์ ์์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด์ผํ๋ค.
prototype ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ํด๋์ค ์์ ํ๊ธฐ ์์
// ํจ์ ๋ง๋ค๊ธฐ
function Employee():void {
this.age = 20;
this.salary = 2000;
}
var worker = new Employee(); // Employeeํจ์๋ก worker๋ผ๋ ์ธ์คํด์ค๋ฅผ ์๋ก ๋ง๋ ๋ค.
trace(worker.age); // work๊ฐ์ฒด์ age ์์ฑ๊ฐ ํธ์ถ. "20"์ถ๋ ฅ
Employee.prototype.company = "Google corp"; // Employee ํ๋กํ ํ์
์ ์ด์ฉํ์ฌ ๊ฐ๋ฃ๊ธฐ
worker.com2 = "concon"; // ์ธ์คํด์ค๋ฅผ ํตํ์ฌ ๊ฐ๋ฃ๊ธฐ
trace(worker.company); // "Google corp" ์ถ๋ ฅ
trace(worker.com2); // "concon" ์ถ๋ ฅ
trace("------------------------");
var worker2 = new Employee(); // Employeeํจ์๋ก worker2๋ผ๋ ์ธ์คํด์ค๋ฅผ ์๋ก ๋ง๋ ๋ค.
trace(worker2.company); // "Google corp" ์ถ๋ ฅ
trace(worker2.com2); // undefined ์ถ๋ ฅ.
// Employeeํจ์์์ getBonus๋ผ๋ ๋ฉ์๋ ๋ง๋ค๊ธฐ.
Employee.prototype.getBonus = function(percentage:int):Number {
return this.salary * (percentage / 100);
}
trace(worker.getBonus(10)); // "200" ์ถ๋ ฅ
์ถ๊ฐ์ค๋ช
- ๋ชจ๋ ํด๋์ค์ ๋ํด์ static prototype๋ณ์๋ฅผ ์ ์ํ๊ณ ์๋ค.
- String ํด๋์ค์์ prototype๊ฐ์ฒด ์ ์ํ๊ธฐ
String.prototype.isEmpty = function() {
return (this == "") ? true : false;
}
prototype์ isEmpty()๋ฉ์๋๋ฅผ ํธ์ถํ๋ ค๋ฉด ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ค.
var s1:String = "Hello world";
var s2:String = "";
trace(s1.isEmpty()); // "false"์ถ๋ ฅ
trace(s2.isEmpty()); // "true"์ถ๋ ฅ
์์๊ฐ์ ํํ์ ํธ์ถ์ ์๋ฌ๋ฅผ ๋ฟ์ด๋ผ ์ ์๊ธฐ ๋๋ฌธ์ ์๋์๊ฐ์ด ๋์ฒดํด๋ณธ๋ค.
s1["isEmpty"]();
prototype ์ฒด์ธ ์์
// Employee()๋ฅผ ์์ฑํ๊ณ prototype์ผ๋ก company๋ณ์๋ฅผ ์ง์ ํ๋ค.
function Employee() { }
Employee.prototype.company = "Corp";
// ์ฐ๊ฒฐ์ํฌ Manager()๋ฅผ ์์ฑํ๋ค.
function Manager() { }
// Employee()๋ก๋ถํฐ ์์ฑ๋๋ ๊ฐ์ฒด๋ฅผ Manager()์ prototype๋ณ์์ ๋์
ํ๋ค.
Manager.prototype = new Employee();
// worker ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ Employee()์์ ์ ๊ทผํ ์ ์๋์ง ํ์ธํ๋ค.
var worker = new Manager();
trace(worker.company); // "Corp" ์ถ๋ ฅ
prototype ์ฒด์ธ์ ๋ํ์ฌ
- ์์ ์์ ์์ company๋ณ์๋ฅผ ์ฐพ์๋ค๋๋ ์ฌ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- worker๊ฐ์ฒด์ ๋ํด company ๋ณ์๋ฅผ ์ฐพ์ง๋ง ์ฐพ์ง ๋ชปํ๋ค.
- Manager.prototype์์ company๋ณ์๋ฅผ ์ฐพ์ง๋ง ์ฐพ์ง ๋ชปํ๋ค.
- Manager.prototype์ Employee()๋ก๋ถํฐ ์์ฑ๋๋ฏ๋ก, Employee์์ company๋ณ์๋ฅผ ์ฐพ๋๋ค.
- ๋ณ์์ ๊ฐ์ ์ ํ ๋ ์ก์ ์คํฌ๋ฆฝํธ์์ ๊ฒ์ํ๋ prototype ๊ฐ์ฒด๋ค์ ๋ชฉ๋ก์ prototype ์ฒด์ธ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- prototype์ฒด์ธ์์์ ์ ์ฝ์ฌํญ
- prototype ๋ณ์์ ๋์ ๋ ๊ฐ์ฒด๋ ๊ทธ ์์ฒด๊ฐ ํจ์๋ก๋ถํฐ ์์ฑ๋ ๊ฐ์ฒด์ด๊ฑฐ๋ Object ํด๋์ค์ ์ธ์คํด์ค์ฌ์ผํ๋ค.
- ํด๋์ค์ prototype ๋ณ์์ ๊ฐ์ ์ก์ ์คํฌ๋ฆฝํธ์ ์ํด์ ์๋์ผ๋ก ์ค์ ๋๋ฉฐ ์ฌ์ค์ ํ ์ ์๋ค.