JavaScript ÑпÑоекÑиÑован на оÑнове пÑоÑÑой паÑадигмÑ. РоÑнове конÑепÑии Ð»ÐµÐ¶Ð°Ñ Ð¿ÑоÑÑÑе обÑекÑÑ. ÐбÑÐµÐºÑ â ÑÑо Ð½Ð°Ð±Ð¾Ñ ÑвойÑÑв, и каждое ÑвойÑÑво ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· имени и знаÑениÑ, аÑÑоÑииÑованного Ñ ÑÑим именем. ÐнаÑением ÑвойÑÑва Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑнкÑиÑ, коÑоÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ назваÑÑ Ð¼ÐµÑодом обÑекÑа. Рдополнение к вÑÑÑоеннÑм в бÑаÑÐ·ÐµÑ Ð¾Ð±ÑекÑам, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ Ñвои ÑобÑÑвеннÑе обÑекÑÑ. ÐÑа глава опиÑÑÐ²Ð°ÐµÑ ÐºÐ°Ðº полÑзоваÑÑÑÑ Ð¾Ð±ÑекÑами, ÑвойÑÑвами, ÑÑнкÑиÑми и меÑодами, а Ñакже как ÑоздаваÑÑ Ñвои ÑобÑÑвеннÑе обÑекÑÑ.
ÐÐ±Ð·Ð¾Ñ Ð¾Ð±ÑекÑовÐбÑекÑÑ Ð² JavaScript, как и во Ð¼Ð½Ð¾Ð³Ð¸Ñ Ð´ÑÑÐ³Ð¸Ñ ÑзÑÐºÐ°Ñ Ð¿ÑогÑаммиÑованиÑ, Ð¿Ð¾Ñ Ð¾Ð¶Ð¸ на обÑекÑÑ ÑеалÑной жизни. ÐонÑепÑÐ¸Ñ Ð¾Ð±ÑекÑов JavaScript легÑе понÑÑÑ, пÑÐ¾Ð²Ð¾Ð´Ñ Ð¿Ð°Ñаллели Ñ ÑеалÑно ÑÑÑеÑÑвÑÑÑими в жизни обÑекÑами.
Ð JavaScript обÑÐµÐºÑ â ÑÑо ÑамоÑÑоÑÑелÑÐ½Ð°Ñ ÐµÐ´Ð¸Ð½Ð¸Ñа, имеÑÑÐ°Ñ ÑвойÑÑва и опÑеделÑннÑй Ñип. СÑавним, напÑимеÑ, Ñ ÑаÑкой. У ÑаÑки еÑÑÑ ÑвеÑ, ÑоÑма, веÑ, маÑеÑиал, из коÑоÑого она Ñделана, и Ñ.д. ТоÑно Ñак же, обÑекÑÑ JavaScript имеÑÑ ÑвойÑÑва, коÑоÑÑе опÑеделÑÑÑ Ð¸Ñ Ñ Ð°ÑакÑеÑиÑÑики.
ÐбÑекÑÑ Ð¸ ÑвойÑÑваРJavaScript обÑÐµÐºÑ Ð¸Ð¼ÐµÐµÑ ÑвойÑÑва, аÑÑоÑииÑованнÑе Ñ Ð½Ð¸Ð¼. СвойÑÑво обÑекÑа можно понимаÑÑ ÐºÐ°Ðº пеÑеменнÑÑ, закÑеплÑннÑÑ Ð·Ð° обÑекÑом. СвойÑÑва обÑекÑа в ÑÑÑноÑÑи ÑвлÑÑÑÑÑ Ñеми же ÑамÑми пеÑеменнÑми JavaScript, за Ñем иÑклÑÑением, ÑÑо они закÑÐµÐ¿Ð»ÐµÐ½Ñ Ð·Ð° обÑекÑом. СвойÑÑва обÑекÑа опÑеделÑÑÑ ÐµÐ³Ð¾ Ñ Ð°ÑакÑеÑиÑÑики. ÐолÑÑиÑÑ Ð´Ð¾ÑÑÑп к ÑвойÑÑÐ²Ñ Ð¾Ð±ÑекÑа можно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑоÑеÑной запиÑи:
Ðак и вÑе пеÑеменнÑе JavaScript, Ð¸Ð¼Ñ Ð¾Ð±ÑекÑа (коÑоÑое Ñоже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÐµÑеменной) и Ð¸Ð¼Ñ ÑвойÑÑва ÑвлÑÑÑÑÑ ÑÑвÑÑвиÑелÑнÑми к ÑегиÑÑÑÑ. ÐÑ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ ÑвойÑÑво Ñказав его знаÑение. ÐапÑимеÑ, давайÑе Ñоздадим обÑÐµÐºÑ myCar
и опÑеделим его ÑвойÑÑва make
, model
, и year
ÑледÑÑÑим обÑазом:
var myCar = new Object();
myCar.make = "Ford";
myCar.model = "Mustang";
myCar.year = 1969;
ÐеопÑеделÑннÑе ÑвойÑÑва обÑекÑа ÑвлÑÑÑÑÑ undefined
(а не null
).
myCar.color; // undefined
СвойÑÑва обÑекÑов JavaScript Ñакже могÑÑ Ð±ÑÑÑ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð¸Ð»Ð¸ Ð·Ð°Ð´Ð°Ð½Ñ Ñ Ð¸ÑполÑзованием ÑкобоÑной запиÑи (более подÑобно Ñм. property accessors). ÐбÑекÑÑ Ð¸Ð½Ð¾Ð³Ð´Ð° назÑваÑÑÑÑ Ð°ÑÑоÑиаÑивнÑми маÑÑивами, поÑколÑÐºÑ ÐºÐ°Ð¶Ð´Ð¾Ðµ ÑвойÑÑво ÑвÑзано Ñо ÑÑÑоковÑм знаÑением, коÑоÑое можно иÑполÑзоваÑÑ Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к немÑ. Так, напÑимеÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе полÑÑиÑÑ Ð´Ð¾ÑÑÑп к ÑвойÑÑвам обÑекÑа myCar
ÑледÑÑÑим обÑазом:
myCar["make"] = "Ford";
myCar["model"] = "Mustang";
myCar["year"] = 1969;
Ðмена ÑвойÑÑв обÑекÑа могÑÑ Ð±ÑÑÑ ÑÑÑоками JavaScript, или Ñем, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑконвеÑÑиÑовано в ÑÑÑокÑ, вклÑÑÐ°Ñ Ð¿ÑÑÑÑÑ ÑÑÑокÑ. Ðак Ð±Ñ Ñо ни бÑло, доÑÑÑп к лÑÐ±Ð¾Ð¼Ñ Ð¸Ð¼ÐµÐ½Ð¸ ÑвойÑÑва, коÑоÑое ÑодеÑÐ¶Ð¸Ñ Ð½ÐµÐ²Ð°Ð»Ð¸Ð´Ð½Ñй JavaScript иденÑиÑикаÑÐ¾Ñ (напÑимеÑ, Ð¸Ð¼Ñ ÑвойÑÑва ÑодеÑÐ¶Ð¸Ñ Ð² Ñебе пÑобел и ÑиÑе или наÑинаеÑÑÑ Ñ ÑиÑÑÑ), Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÑÑен Ñ Ð¸ÑполÑзованием квадÑаÑнÑÑ Ñкобок. ÐÑÐ¾Ñ ÑпоÑоб запиÑи Ñакже полезен, когда имена ÑвойÑÑв Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑки опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ (когда Ð¸Ð¼Ñ ÑвойÑÑва не опÑеделено до моменÑа иÑполнениÑ). ÐÑимеÑÑ Ð´Ð°Ð»ÐµÐµ:
var myObj = new Object(),
str = "myString",
rand = Math.random(),
obj = new Object();
myObj.type = "Dot syntax";
myObj["date created"] = "String with space";
myObj[str] = "String value";
myObj[rand] = "Random Number";
myObj[obj] = "Object";
myObj[""] = "Even an empty string";
console.log(myObj);
ÐбÑаÑиÑе внимание, ÑÑо вÑе клÑÑи Ñ ÐºÐ²Ð°Ð´ÑаÑнÑми Ñкобками пÑеобÑазÑÑÑÑÑ Ð² Ñип String, поÑколÑÐºÑ Ð¾Ð±ÑекÑÑ Ð² JavaScript могÑÑ Ð¸Ð¼ÐµÑÑ Ð² каÑеÑÑве клÑÑа ÑолÑко Ñип String. ÐапÑимеÑ, в пÑиведÑнном вÑÑе коде, когда клÑÑ obj
добавлÑеÑÑÑ Ð² myObj
, JavaScript вÑзÑÐ²Ð°ÐµÑ Ð¼ÐµÑод obj.toString ()
и иÑполÑзÑÐµÑ ÑÑÑ ÑезÑлÑÑиÑÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ð² каÑеÑÑве нового клÑÑа.
ÐÑ Ñакже можеÑе полÑÑиÑÑ Ð´Ð¾ÑÑÑп к ÑвойÑÑвам, иÑполÑзÑÑ Ð·Ð½Ð°Ñение ÑÑÑоки, коÑоÑое Ñ ÑаниÑÑÑ Ð² пеÑеменной:
var propertyName = "make";
myCar[propertyName] = "Ford";
propertyName = "model";
myCar[propertyName] = "Mustang";
ÐÑ Ð¼Ð¾Ð¶ÐµÑе полÑзоваÑÑÑÑ ÐºÐ²Ð°Ð´ÑаÑнÑми Ñкобками в конÑÑÑÑкÑии for...in ÑÑÐ¾Ð±Ñ Ð²ÑполниÑÑ Ð¸ÑеÑаÑÐ¸Ñ Ð²ÑÐµÑ ÑвойÑÑв обÑекÑа, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ Ð¾Ð½Ð° ÑазÑеÑена. ЧÑÐ¾Ð±Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑ ÐºÐ°Ðº ÑÑо ÑабоÑаеÑ, ÑледÑÑÑÐ°Ñ ÑÑнкÑÐ¸Ñ Ð¿Ð¾ÐºÐ°Ð·ÑÐ²Ð°ÐµÑ Ð²Ñе ÑвойÑÑва обÑекÑа, когда Ð²Ñ Ð¿ÐµÑедаÑÑе в Ð½ÐµÑ Ñам обÑÐµÐºÑ Ð¸ его Ð¸Ð¼Ñ ÐºÐ°Ðº аÑгÑменÑÑ ÑÑнкÑии:
function showProps(obj, objName) {
var result = "";
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
result += objName + "." + i + " = " + obj[i] + "\n";
}
}
return result;
}
Так ÑÑо еÑли вÑзваÑÑ ÑÑÑ ÑÑнкÑÐ¸Ñ Ð²Ð¾Ñ Ñак showProps(myCar, "myCar"),
Ñо полÑÑим ÑезÑлÑÑаÑ:
myCar.make = Ford;
myCar.model = Mustang;
myCar.year = 1969;
ÐеÑеÑиÑление вÑеÑ
ÑвойÑÑв обÑекÑа
ÐаÑÐ¸Ð½Ð°Ñ Ñ ECMAScript 5, еÑÑÑ ÑÑи ÑпоÑоба пеÑеÑиÑлиÑÑ Ð²Ñе ÑвойÑÑва обÑекÑа (полÑÑиÑÑ Ð¸Ñ ÑпиÑок):
o
.o
.Ðо ECMAScript 5 не бÑло вÑÑÑоенного ÑпоÑоба пеÑеÑиÑлиÑÑ Ð²Ñе ÑвойÑÑва обÑекÑа. Ðднако ÑÑо можно ÑделаÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑледÑÑÑей ÑÑнкÑии:
function listAllProperties(o) {
var objectToInspect;
var result = [];
for (
objectToInspect = o;
objectToInspect !== null;
objectToInspect = Object.getPrototypeOf(objectToInspect)
) {
result = result.concat(Object.getOwnPropertyNames(objectToInspect));
}
return result;
}
ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ð´Ð»Ñ Ð¾Ð±Ð½Ð°ÑÑÐ¶ÐµÐ½Ð¸Ñ ÑкÑÑÑÑÑ (hidden) ÑвойÑÑв (ÑвойÑÑва в ÑепоÑке пÑоÑоÑипа, коÑоÑÑе недоÑÑÑÐ¿Ð½Ñ ÑеÑез обÑекÑ, в ÑлÑÑае, еÑли дÑÑгое ÑвойÑÑво Ð¸Ð¼ÐµÐµÑ Ñакое же Ð¸Ð¼Ñ Ð² пÑедÑдÑÑем звене из ÑепоÑки пÑоÑоÑипа). ÐеÑеÑиÑлиÑÑ Ð´Ð¾ÑÑÑпнÑе ÑвойÑÑва можно, еÑли ÑдалиÑÑ Ð´ÑбликаÑÑ Ð¸Ð· маÑÑива.
Создание новÑÑ Ð¾Ð±ÑекÑовJavaScript ÑодеÑÐ¶Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ Ð²ÑÑÑоеннÑÑ
обÑекÑов. Также Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаваÑÑ Ñвои обÑекÑÑ. ÐаÑÐ¸Ð½Ð°Ñ Ñ JavaScript 1.2, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаваÑÑ Ð¾Ð±ÑÐµÐºÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¸Ð½Ð¸ÑиализаÑоÑа обÑекÑа. ÐÑÑгой ÑпоÑоб â ÑоздаÑÑ ÑÑнкÑиÑ-конÑÑÑÑкÑÐ¾Ñ Ð¸ ÑделаÑÑ ÑкземплÑÑ Ð¾Ð±ÑекÑа Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑой ÑÑнкÑии и опеÑаÑоÑа new
.
Ðомимо ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑов Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑии-конÑÑÑÑкÑоÑа Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаваÑÑ Ð¾Ð±ÑекÑÑ Ð¸ дÑÑгим, оÑобÑм ÑпоÑобом. ФакÑиÑеÑки, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе запиÑаÑÑ Ð¾Ð±ÑÐµÐºÑ ÑинÑакÑиÑеÑки, и он бÑÐ´ÐµÑ Ñоздан инÑеÑпÑеÑаÑоÑом авÑомаÑиÑеÑки во вÑÐµÐ¼Ñ Ð²ÑполнениÑ. ÐÑа ÑинÑакÑиÑеÑÐºÐ°Ñ ÑÑ ÐµÐ¼Ð° пÑиведена ниже:
var obj = {
property_1: value_1, // property_# may be an identifier...
2: value_2, // or a number...
// ...,
"property n": value_n,
}; // or a string
здеÑÑ obj
â ÑÑо Ð¸Ð¼Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ обÑекÑа, каждое property_i
â ÑÑо иденÑиÑикаÑÐ¾Ñ (имÑ, ÑиÑло или ÑÑÑоковÑй лиÑеÑал), и каждÑй value_i
â ÑÑо знаÑениÑ, назнаÑеннÑе property_i
. ÐÐ¼Ñ obj
и ÑÑÑлка обÑекÑа на него необÑзаÑелÑна; еÑли далее вам не надо бÑÐ´ÐµÑ ÑÑÑлаÑÑÑÑ Ð½Ð° даннÑй обÑекÑ, Ñо вам не обÑзаÑелÑно назнаÑаÑÑ Ð¾Ð±ÑÐµÐºÑ Ð¿ÐµÑеменной. (ÐбÑаÑиÑе внимание, ÑÑо вам поÑÑебÑеÑÑÑ Ð¾Ð±ÐµÑнÑÑÑ Ð»Ð¸ÑеÑал обÑекÑа в Ñкобки, еÑли обÑÐµÐºÑ Ð½Ð°Ñ
одиÑÑÑ Ð² меÑÑе, где ожидаеÑÑÑ Ð¸Ð½ÑÑÑÑкÑиÑ, ÑÑÐ¾Ð±Ñ Ð¸Ð½ÑеÑпÑеÑаÑÐ¾Ñ Ð½Ðµ пеÑепÑÑал его Ñ Ð±Ð»Ð¾ÐºÐ¾Ð¼.)
ÐÑли обÑÐµÐºÑ Ñоздан пÑи помоÑи иниÑиализаÑоÑа обÑекÑов на вÑÑÑем ÑÑовне ÑкÑипÑа, Ñо JavaScript инÑеÑпÑеÑиÑÑÐµÑ Ð¾Ð±ÑÐµÐºÑ ÐºÐ°Ð¶Ð´Ñй Ñаз, когда анализиÑÑÐµÑ Ð²ÑÑажение, ÑодеÑжаÑее обÑекÑ, запиÑаннÑй как лиÑеÑал. ÐлÑÑ, еÑли полÑзоваÑÑÑÑ ÑÑнкÑией иниÑиализаÑоÑом, Ñо он бÑÐ´ÐµÑ ÑоздаваÑÑÑÑ ÐºÐ°Ð¶Ð´Ñй Ñаз, когда ÑÑнкÑÐ¸Ñ Ð²ÑзÑваеÑÑÑ.
СледÑÑÑÐ°Ñ Ð¸Ð½ÑÑÑÑкÑÐ¸Ñ ÑоздаÑÑ Ð¾Ð±ÑÐµÐºÑ Ð¸ назнаÑÐ°ÐµÑ ÐµÐ³Ð¾ пеÑеменной x
, когда вÑÑажение cond
иÑÑинно.
if (cond) var x = { hi: "there" };
СледÑÑÑий пÑÐ¸Ð¼ÐµÑ ÑоздаÑÑ Ð¾Ð±ÑÐµÐºÑ myHonda
Ñ ÑÑÐµÐ¼Ñ ÑвойÑÑвами. ÐамеÑÑÑе, ÑÑо ÑвойÑÑво engine
â ÑÑо Ñакже обÑÐµÐºÑ Ñо Ñвоими ÑобÑÑвеннÑми ÑвойÑÑвами.
var myHonda = {
color: "red",
wheels: 4,
engine: {
cylinders: 4,
size: 2.2,
},
};
ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ Ð¸Ð½Ð¸ÑиализаÑÐ¾Ñ Ð¾Ð±ÑекÑа Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¼Ð°ÑÑивов. СмоÑÑиÑе array literals.
Ðо JavaScript 1.1 не бÑло возможноÑÑи полÑзоваÑÑÑÑ Ð¸Ð½Ð¸ÑиализаÑоÑами обÑекÑа. ÐдинÑÑвеннÑй ÑпоÑоб ÑоздаваÑÑ Ð¾Ð±ÑекÑÑ â ÑÑо полÑзоваÑÑÑÑ ÑÑнкÑиÑми-конÑÑÑÑкÑоÑами или ÑÑнкÑиÑми дÑÑÐ³Ð¸Ñ Ð¾Ð±ÑекÑов, пÑедназнаÑеннÑÑ Ð´Ð»Ñ ÑÑой Ñели. СмоÑÑиÑе Using a constructor function.
ÐÑполÑзование ÑÑнкÑии конÑÑÑÑкÑоÑаÐÑÑгой ÑпоÑоб ÑоздаÑÑ Ð¾Ð±ÑÐµÐºÑ Ð² два Ñага опиÑан ниже:
new
.ЧÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ Ñип обÑекÑа ÑоздайÑе ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð¾Ð¿ÑеделÑÐµÑ Ñип обÑекÑа, его имÑ, ÑвойÑÑва и меÑодÑ. ÐапÑÐ¸Ð¼ÐµÑ Ð¿Ñедположим, ÑÑо Ð²Ñ Ñ
оÑиÑе ÑоздаÑÑ Ñип обÑекÑа Ð´Ð»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð¼Ð°Ñин. ÐÑ Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑÐµÐºÑ ÑÑого Ñипа назÑвалÑÑ car
, и Ð²Ñ Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ñ Ð½ÐµÐ³Ð¾ бÑли ÑвойÑÑва make, model, и year. ЧÑÐ¾Ð±Ñ ÑделаÑÑ ÑÑо, напиÑиÑе ÑледÑÑÑÑÑ ÑÑнкÑиÑ:
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
ÐамеÑÑÑе, ÑÑо иÑполÑзÑеÑÑÑ this
ÑÑÐ¾Ð±Ñ Ð¿ÑиÑвоиÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ (пеÑеданнÑе как аÑгÑменÑÑ ÑÑнкÑии) ÑвойÑÑвам обÑекÑа.
ТепеÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¾Ð±ÑекÑ, назÑваемÑй mycar
, ÑледÑÑÑим обÑазом:
var mycar = new Car("Eagle", "Talon TSi", 1993);
ÐÑа инÑÑÑÑкÑÐ¸Ñ ÑоздаÑÑ Ð¾Ð±ÑÐµÐºÑ Ñипа Car Ñо ÑÑÑлкой mycar
и пÑиÑÐ²Ð°Ð¸Ð²Ð°ÐµÑ Ð¾Ð¿ÑеделÑннÑе знаÑÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ ÑвойÑÑвам. ÐнаÑением mycar.make
ÑÑÐ°Ð½ÐµÑ ÑÑÑока "Eagle", mycar.year
â ÑÑо Ñелое ÑиÑло 1993, и Ñак далее.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ ÑÑолÑко обÑекÑов car,
ÑколÑко нÑжно, пÑоÑÑо вÑзÑÐ²Ð°Ñ new
. ÐапÑимеÑ:
var kenscar = new Car("Nissan", "300ZX", 1992);
var vpgscar = new Car("Mazda", "Miata", 1990);
ÐбÑÐµÐºÑ Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ ÑвойÑÑво, коÑоÑое бÑÐ´ÐµÑ Ð´ÑÑгим обÑекÑом. ÐапÑимеÑ, далее опÑеделÑеÑÑÑ Ð¾Ð±ÑÐµÐºÑ Ñипа Person
ÑледÑÑÑим обÑазом:
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
и заÑем ÑоздаÑÑ Ð´Ð²Ð° новÑÑ
ÑкземплÑÑа обÑекÑов Person
как показано далее:
var rand = new Person("Rand McKinnon", 33, "M");
var ken = new Person("Ken Jones", 39, "M");
ÐаÑем, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пеÑепиÑаÑÑ Ð¾Ð¿Ñеделение car
и вклÑÑиÑÑ Ð² него ÑвойÑÑво owner
, коÑоÑÐ¾Ð¼Ñ Ð½Ð°Ð·Ð½Ð°ÑиÑÑ Ð¾Ð±ÑÐµÐºÑ person
ÑледÑÑÑим обÑазом:
function Car(make, model, year, owner) {
this.make = make;
this.model = model;
this.year = year;
this.owner = owner;
}
ÐаÑем, ÑÑÐ¾Ð±Ñ ÑоздаÑÑ ÑкземплÑÑÑ Ð½Ð¾Ð²ÑÑ Ð¾Ð±ÑекÑов, вÑполниÑе ÑледÑÑÑие инÑÑÑÑкÑии:
var car1 = new Car("Eagle", "Talon TSi", 1993, rand);
var car2 = new Car("Nissan", "300ZX", 1992, ken);
ÐамеÑÑÑе, ÑÑо вмеÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð¿ÐµÑедаваÑÑ ÑÑÑокÑ, лиÑеÑал или Ñелое ÑиÑло пÑи Ñоздании новÑÑ
обÑекÑов, в вÑÑажениÑÑ
вÑÑе пеÑедаÑÑÑÑ Ð¾Ð±ÑекÑÑ rand
и ken
как аÑгÑÐ¼ÐµÐ½Ñ ÑÑнкÑии. ТепеÑÑ, еÑли вам нÑжно ÑзнаÑÑ Ð¸Ð¼Ñ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑа car2, ÑÑо можно ÑделаÑÑ ÑледÑÑÑим обÑазом:
ÐамеÑÑÑе, ÑÑо в лÑбое вÑÐµÐ¼Ñ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ Ð½Ð¾Ð²Ð¾Ðµ ÑвойÑÑво Ñанее ÑÐ¾Ð·Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð¾Ð±ÑекÑÑ. ÐапÑимеÑ, вÑÑажение
добавлÑÐµÑ ÑвойÑÑво color
к car1, и ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ ÐµÐ³Ð¾ знаÑение ÑавнÑм "black." Ðак Ð±Ñ Ñам ни бÑло, ÑÑо не влиÑÐµÑ Ð½Ð° лÑбÑе дÑÑгие обÑекÑÑ. ЧÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð½Ð¾Ð²Ð¾Ðµ ÑвойÑÑво вÑем обÑекÑам одного Ñипа, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑвойÑÑво в опÑеделение Ñипа обÑекÑа car
.
ÐбÑекÑÑ Ñакже можно ÑоздаваÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼ÐµÑода Object.create
. ÐÑÐ¾Ñ Ð¼ÐµÑод оÑÐµÐ½Ñ Ñдобен, Ñак как позволÑÐµÑ Ð²Ð°Ð¼ ÑказÑваÑÑ Ð¾Ð±ÑÐµÐºÑ Ð¿ÑоÑоÑип Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ ваÑего обÑекÑа без опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑнкÑии конÑÑÑÑкÑоÑа.
// ÑпиÑок ÑвойÑÑв и меÑодов Ð´Ð»Ñ Animal
var Animal = {
type: "Invertebrates", // ÐнаÑение type по ÑмолÑаниÑ
displayType: function () {
// ÐеÑод оÑобÑажаÑÑий Ñип обÑекÑа Animal
console.log(this.type);
},
};
// СоздаÑм обÑÐµÐºÑ Animal
var animal1 = Object.create(Animal);
animal1.displayType(); // ÐÑведеÑ:Invertebrates
// СоздаÑм обÑÐµÐºÑ Animal и пÑиÑваиваем ÐµÐ¼Ñ type = Fishes
var fish = Object.create(Animal);
fish.type = "Fishes";
fish.displayType(); // ÐÑведеÑ:Fishes
ÐаÑледование
ÐÑе обÑекÑÑ Ð² JavaScript наÑледÑÑÑÑÑ ÐºÐ°Ðº минимÑм Ð¾Ñ Ð´ÑÑгого обÑекÑа. ÐбÑекÑ, Ð¾Ñ ÐºÐ¾ÑоÑого пÑоизоÑло наÑледование назÑваеÑÑÑ Ð¿ÑоÑоÑипом, и ÑнаÑледованнÑе ÑвойÑÑва могÑÑ Ð±ÑÑÑ Ð½Ð°Ð¹Ð´ÐµÐ½Ñ Ð² обÑекÑе prototype
конÑÑÑÑкÑоÑа.
Ð JavaScript 1.0 Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоÑлаÑÑÑÑ Ð½Ð° ÑвойÑÑва обÑекÑа либо по его имени, либо по его поÑÑÐ´ÐºÐ¾Ð²Ð¾Ð¼Ñ Ð¸Ð½Ð´ÐµÐºÑÑ. Ð JavaScript 1.1 и позже, еÑли Ð²Ñ Ð¸Ð·Ð½Ð°ÑалÑно опÑеделили ÑвойÑÑво по имени, Ð²Ñ Ð²Ñегда Ð´Ð¾Ð»Ð¶Ð½Ñ ÑÑÑлаÑÑÑÑ Ð½Ð° него по его имени, и еÑли Ð²Ñ Ð¸Ð·Ð½Ð°ÑалÑно опÑеделили ÑвойÑÑво по индекÑÑ, Ñо Ð´Ð¾Ð»Ð¶Ð½Ñ ÑÑÑлаÑÑÑÑ Ð½Ð° него по его индекÑÑ.
ÐÑо огÑаниÑение налагаеÑÑÑ ÐºÐ¾Ð³Ð´Ð° Ð²Ñ ÑоздаÑÑе обÑÐµÐºÑ Ð¸ его ÑвойÑÑва Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑии конÑÑÑÑкÑоÑа (как Ð¼Ñ ÑÑо делали Ñанее Ñ Ñипом Car ) и когда Ð²Ñ Ð¾Ð¿ÑеделÑеÑе индивидÑалÑнÑе ÑвойÑÑва Ñвно (напÑимеÑ, myCar.color = "red"
). ÐÑли Ð²Ñ Ð¸Ð·Ð½Ð°ÑалÑно опÑеделили ÑвойÑÑво обÑекÑа ÑеÑез индекÑ, напÑÐ¸Ð¼ÐµÑ myCar[5] = "25 mpg"
, Ñо впоÑледÑÑвии ÑоÑлаÑÑÑÑ Ð½Ð° ÑÑо ÑвойÑÑво можно ÑолÑко Ñак myCar[5]
.
ÐÑклÑÑение из пÑавил â обÑекÑÑ, оÑобÑажаемÑе из HTML, напÑÐ¸Ð¼ÐµÑ Ð¼Ð°ÑÑив forms
. ÐÑ Ð²Ñегда можеÑе ÑоÑлаÑÑÑÑ Ð½Ð° обÑекÑÑ Ð² ÑÑиÑ
маÑÑиваÑ
или иÑполÑзÑÑ Ð¸Ñ
Ð¸Ð½Ð´ÐµÐºÑ (коÑоÑÑй оÑновÑваеÑÑÑ Ð½Ð° поÑÑдке поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð² HTML докÑменÑе), или по иÑ
именам (еÑли ÑаковÑе бÑли опÑеделенÑ). ÐапÑимеÑ, еÑли вÑоÑой html-Ñег <FORM>
в докÑменÑе Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение аÑÑибÑÑа NAME
Ñавное "myForm", Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоÑлаÑÑÑÑ Ð½Ð° ÑÑÑ ÑоÑÐ¼Ñ Ð²Ð¾Ñ Ñак: document.forms[1]
или document.forms["myForm"]
или document.myForm
.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ ÑвойÑÑво к Ñанее опÑеделÑÐ½Ð½Ð¾Ð¼Ñ ÑÐ¸Ð¿Ñ Ð¾Ð±ÑекÑа воÑполÑзовавÑиÑÑ ÑпеÑиалÑнÑм ÑвойÑÑвом prototype
. ЧеÑез prototype
ÑоздаÑÑÑÑ ÑвойÑÑво, единое Ð´Ð»Ñ Ð²ÑеÑ
обÑекÑов данного Ñипа, а не одного ÑкземплÑÑа ÑÑого Ñипа обÑекÑа. СледÑÑÑий код демонÑÑÑиÑÑÐµÑ ÑÑо, добавлÑÑ ÑвойÑÑво color
ко вÑем обÑекÑам Ñипа car
, а заÑем пÑиÑÐ²Ð°Ð¸Ð²Ð°Ñ Ð·Ð½Ð°Ñение ÑвойÑÑÐ²Ñ color
обÑекÑа car1
.
Car.prototype.color = null;
car1.color = "black";
СмоÑÑиÑе ÑвойÑÑво prototype
обÑекÑа Function
в СпÑавоÑнике JavaScript Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´ÐµÑалей.
ÐеÑод â ÑÑо ÑÑнкÑиÑ, аÑÑоÑииÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ñ Ð¾Ð±ÑекÑом или, пÑоÑе говоÑÑ, меÑод â ÑÑо ÑвойÑÑво обÑекÑа, ÑвлÑÑÑееÑÑ ÑÑнкÑией. ÐеÑÐ¾Ð´Ñ Ð¾Ð¿ÑеделÑÑÑÑÑ Ñак же, как и обÑÑнÑе ÑÑнкÑии, за Ñем иÑклÑÑением, ÑÑо они пÑиÑваиваÑÑÑÑ ÑвойÑÑÐ²Ñ Ð¾Ð±ÑекÑа. ÐапÑÐ¸Ð¼ÐµÑ Ð²Ð¾Ñ Ñак:
objectName.methodname = function_name;
var myObj = {
myMethod: function (params) {
// ...do something
},
};
где objectName
â ÑÑо ÑÑÑеÑÑвÑÑÑий обÑекÑ, methodname
â ÑÑо имÑ, коÑоÑое Ð²Ñ Ð¿ÑиÑваиваеÑе меÑодÑ, и function_name
â ÑÑо Ð¸Ð¼Ñ Ñамой ÑÑнкÑии.
ÐаÑем Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑзваÑÑ Ð¼ÐµÑод в конÑекÑÑе обÑекÑа ÑледÑÑÑим обÑазом:
object.methodname(params);
ÐÑ Ð¼Ð¾Ð¶ÐµÑе опÑеделÑÑÑ Ð¼ÐµÑÐ¾Ð´Ñ Ð´Ð»Ñ Ñипа обÑекÑа, вклÑÑÐ°Ñ Ð¾Ð¿Ñеделение меÑода в ÑÑнкÑÐ¸Ñ ÐºÐ¾Ð½ÑÑÑÑкÑоÑа обÑекÑа. ÐапÑимеÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ ÑÑнкÑиÑ, коÑоÑÐ°Ñ ÑоÑмаÑиÑÑÐµÑ Ð¸ оÑобÑÐ°Ð¶Ð°ÐµÑ ÑвойÑÑва до ÑÑого опÑеделÑннÑÑ
обÑекÑов car
. ÐапÑимеÑ,
function displayCar() {
var result = "A Beautiful " + this.year + " " + this.make + " " + this.model;
pretty_print(result);
}
где pretty_print
â ÑÑо ÑÑнкÑÐ¸Ñ Ð¾ÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð³Ð¾ÑизонÑалÑной линии и ÑÑÑоки. ÐамеÑÑÑе, ÑÑо иÑполÑзование this
позволÑÐµÑ ÑÑÑлаÑÑÑÑ Ð½Ð° обÑекÑ, коÑоÑÐ¾Ð¼Ñ Ð¿ÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð¸Ñ Ð¼ÐµÑод.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑделаÑÑ ÑÑÑ ÑÑнкÑÐ¸Ñ Ð¼ÐµÑодом car,
добавив инÑÑÑÑкÑиÑ
this.displayCar = displayCar;
к опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑа. Таким обÑазом, полное опÑеделение car
пÑÐ¸Ð¼ÐµÑ ÑледÑÑÑий вид:
function Car(make, model, year, owner) {
this.make = make;
this.model = model;
this.year = year;
this.owner = owner;
this.displayCar = displayCar;
}
ТепеÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑзваÑÑ Ð¼ÐµÑод displayCar
Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ из обÑекÑов как показано ниже:
car1.displayCar();
car2.displayCar();
ÐÑполÑзование this
Ð´Ð»Ñ ÑÑÑлки на обÑекÑ
Ð JavaScript еÑÑÑ ÑпеÑиалÑное клÑÑевое Ñлово this, коÑоÑое Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð²Ð½ÑÑÑи меÑода, ÑÑÐ¾Ð±Ñ ÑÑÑлаÑÑÑÑ Ð½Ð° ÑекÑÑий обÑекÑ. ÐÑедположим, Ñ Ð²Ð°Ñ ÐµÑÑÑ ÑÑнкÑÐ¸Ñ validate, коÑоÑÐ°Ñ ÑвеÑÑÐµÑ ÑвойÑÑво value, пеÑеданного ей обÑекÑа Ñ Ð½ÐµÐºÐ¾ÑоÑÑми веÑÑ Ð½Ð¸Ð¼ и нижним знаÑениÑми:
function validate(obj, lowval, hival) {
if (obj.value < lowval || obj.value > hival) alert("Invalid Value!");
}
ÐÑ Ð¼Ð¾Ð¶ÐµÑе вÑзваÑÑ ÑÑÑ ÑÑнкÑÐ¸Ñ validate
в каждом ÑлеменÑе ÑоÑмÑ, в обÑабоÑÑике ÑобÑÑÐ¸Ñ onchange
. ÐÑполÑзÑйÑе this
Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к ÑÑÐ¾Ð¼Ñ ÑлеменÑÑ, как ÑÑо Ñделано ниже:
<input type="text" name="age" size="3" onChange="validate(this, 18, 99)" />
РобÑем ÑлÑÑае, this
ÑÑÑлаеÑÑÑ Ð½Ð° обÑекÑ, вÑзвавÑий меÑод.
ЧеÑез this
можно обÑаÑиÑÑÑÑ Ð¸ к ÑодиÑелÑÑкой ÑоÑме ÑлеменÑа, воÑполÑзовавÑиÑÑ ÑвойÑÑвом form
. Ð ÑледÑÑÑем пÑимеÑе ÑоÑма myForm
ÑодеÑÐ¶Ð¸Ñ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð²Ð²Ð¾Ð´Ð° Text
и ÐºÐ½Ð¾Ð¿ÐºÑ button1
. Ðогда полÑзоваÑÐµÐ»Ñ Ð½Ð°Ð¶Ð¸Ð¼Ð°ÐµÑ ÐºÐ½Ð¾Ð¿ÐºÑ, знаÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑа Text
назнаÑаеÑÑÑ Ð¸Ð¼Ñ ÑоÑмÑ. ÐбÑабоÑÑик ÑобÑÑий кнопки onclick
полÑзÑеÑÑÑ this.form
ÑÑÐ¾Ð±Ñ ÑоÑлаÑÑÑÑ Ð½Ð° ÑекÑÑÑÑ ÑоÑмÑ, myForm
.
<form name="myForm">
<p>
<label>Form name:<input type="text" name="text1" value="Beluga" /></label>
</p>
<p>
<input
name="button1"
type="button"
value="Show Form Name"
onclick="this.form.text1.value = this.form.name" />
</p>
</form>
ÐпÑеделение геÑÑеÑов и ÑеÑÑеÑов
ÐеÑÑеÑ(Ð¾Ñ Ð°Ð½Ð³Ð». get - полÑÑиÑÑ) â ÑÑо меÑод, коÑоÑÑй полÑÑÐ°ÐµÑ Ð·Ð½Ð°Ñение опÑеделÑнного ÑвойÑÑва. СеÑÑÐµÑ (Ð¾Ñ Ð°Ð½Ð³Ð». set â пÑиÑвоиÑÑ) â ÑÑо меÑод, коÑоÑÑй пÑиÑÐ²Ð°Ð¸Ð²Ð°ÐµÑ Ð·Ð½Ð°Ñение опÑеделÑÐ½Ð½Ð¾Ð¼Ñ ÑвойÑÑÐ²Ñ Ð¾Ð±ÑекÑа. ÐÑ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ Ð³ÐµÑÑеÑÑ Ð¸ ÑеÑÑеÑÑ Ð´Ð»Ñ Ð»ÑбÑÑ Ð¸Ð· вÑÑÑоеннÑÑ Ð¸Ð»Ð¸ опÑеделÑннÑÑ Ð²Ð°Ð¼Ð¸ обÑекÑов, коÑоÑÑе поддеÑживаÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ новÑÑ ÑвойÑÑв. СинÑакÑÐ¸Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð³ÐµÑÑеÑов и ÑеÑÑеÑов иÑполÑзÑÐµÑ Ð»Ð¸ÑеÑалÑнÑй ÑинÑакÑÐ¸Ñ Ð¾Ð±ÑекÑов.
Ðиже пÑоиллÑÑÑÑиÑовано, как могÑÑ ÑабоÑаÑÑ Ð³ÐµÑÑеÑÑ Ð¸ ÑеÑÑеÑÑ Ð² обÑекÑе опÑеделÑнном полÑзоваÑелем:
var o = {
a: 7,
get b() {
return this.a + 1;
},
set c(x) {
this.a = x / 2;
},
};
console.log(o.a); // 7
console.log(o.b); // 8
o.c = 50;
console.log(o.a); // 25
ÐбÑÐµÐºÑ o
полÑÑÐ¸Ñ ÑледÑÑÑие ÑвойÑÑва:
o.a
â ÑиÑлоo.b
â геÑÑеÑ, коÑоÑÑй возвÑаÑÐ°ÐµÑ o.a
плÑÑ 1o.c
â ÑеÑÑеÑ, коÑоÑÑй пÑиÑÐ²Ð°Ð¸Ð²Ð°ÐµÑ Ð·Ð½Ð°Ñение o.a
половине знаÑÐµÐ½Ð¸Ñ ÐºÐ¾ÑоÑое пеÑедано в o.c
СледÑÐµÑ Ð¾Ñобо оÑмеÑиÑÑ, ÑÑо имена ÑÑнкÑий, ÑказаннÑе в лиÑеÑалÑной ÑоÑме "[gs]et propertyName() { }" не бÑдÑÑ Ð² дейÑÑвиÑелÑноÑÑи ÑвлÑÑÑÑÑ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ геÑÑеÑа и ÑеÑÑеÑа. ЧÑÐ¾Ð±Ñ Ð·Ð°Ð´Ð°ÑÑ Ð² каÑеÑÑве геÑÑеÑа и ÑеÑÑеÑа ÑÑнкÑии Ñ Ñвно опÑеделÑннÑми именами, иÑполÑзÑйÑе меÑод Object.defineProperty
(или его ÑÑÑаÑевÑий аналог Object.prototype.__defineGetter__
).
Ркоде ниже показано, как Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð³ÐµÑÑеÑа и ÑеÑÑеÑа можно ÑаÑÑиÑиÑÑ Ð¿ÑоÑоÑип обÑекÑа Date
и добавиÑÑ ÐµÐ¼Ñ ÑвойÑÑво year,
коÑоÑое бÑÐ´ÐµÑ ÑабоÑаÑÑ Ñ Ð²ÑеÑ
ÑкземплÑÑов клаÑÑа Date
. ÐÑÐ¾Ñ ÐºÐ¾Ð´ иÑполÑзÑÐµÑ ÑÑÑеÑÑвÑÑÑие меÑÐ¾Ð´Ñ ÐºÐ»Ð°ÑÑа Date
- getFullYear
и setFullYear
Ð´Ð»Ñ ÑабоÑÑ Ð³ÐµÑÑеÑа и ÑеÑÑеÑа.
ÐпÑеделение геÑÑеÑа и ÑеÑÑеÑа Ð´Ð»Ñ ÑвойÑÑва year
:
var d = Date.prototype;
Object.defineProperty(d, "year", {
get: function () {
return this.getFullYear();
},
set: function (y) {
this.setFullYear(y);
},
});
ÐÑполÑзование ÑвойÑÑва year
заданного геÑÑеÑом и ÑеÑÑеÑом:
var now = new Date();
console.log(now.year); // 2000
now.year = 2001; // 987617605170
console.log(now);
// Wed Apr 18 11:13:25 GMT-0700 (Pacific Daylight Time) 2001
РпÑинÑипе, геÑÑеÑÑ Ð¸ ÑеÑÑеÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð»Ð¸Ð±Ð¾:
Ðогда опÑеделение геÑÑеÑа и ÑеÑÑеÑа иÑполÑзÑÐµÑ Ð¸Ð½Ð¸ÑиализаÑоÑÑ Ð¾Ð±ÑекÑа, вÑÑ ÑÑо вам нÑжно, ÑÑо дополниÑÑ Ð³ÐµÑÑÐµÑ Ð¿ÑеÑикÑом get
а ÑеÑÑÐµÑ Ð¿ÑеÑикÑом set
. ÐÑи ÑÑом, меÑод геÑÑеÑа не должен ожидаÑÑ ÐºÐ°ÐºÐ¸Ñ
либо паÑамеÑÑов, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº меÑод ÑеÑÑеÑа пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¾Ð´Ð¸Ð½ единÑÑвеннÑй паÑамеÑÑ (новое знаÑение Ð´Ð»Ñ Ð¿ÑиÑÐ²Ð¾ÐµÐ½Ð¸Ñ ÑвойÑÑвÑ). ÐапÑимеÑ:
var o = {
a: 7,
get b() {
return this.a + 1;
},
set c(x) {
this.a = x / 2;
},
};
ÐеÑÑеÑÑ Ð¸ ÑеÑÑеÑÑ, могÑÑ Ð±ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ ÑÑÑеÑÑвÑÑÑÐµÐ¼Ñ Ð¾Ð±ÑекÑÑ Ð² лÑбой моменÑ, пÑи помоÑи меÑода Object.defineProperties
. ÐеÑвÑй паÑамеÑÑ ÑÑого меÑода - обÑекÑ, коÑоÑÐ¾Ð¼Ñ Ð²Ñ Ñ
оÑиÑе пÑиÑвоиÑÑ Ð³ÐµÑÑÐµÑ Ð¸ ÑеÑÑеÑ. ÐÑоÑой паÑамеÑÑ - ÑÑо обÑекÑ, имена ÑвойÑÑв коÑоÑого бÑдÑÑ ÑооÑвеÑÑÑвоваÑÑ Ð¸Ð¼ÐµÐ½Ð°Ð¼ ÑоздаваемÑÑ
ÑвойÑÑв, а знаÑÐµÐ½Ð¸Ñ - обÑекÑÑ Ð¾Ð¿ÑеделÑÑÑие геÑÑÐµÑ Ð¸ ÑеÑÑÐµÑ ÑоздаваемÑÑ
ÑвойÑÑв. Ð ÑледÑÑÑем пÑимеÑе ÑоздаÑÑÑÑ Ð² ÑоÑноÑÑи Ñакие же геÑÑÐµÑ Ð¸ ÑеÑÑеÑ, как и в пÑимеÑе вÑÑе:
var o = { a: 0 };
Object.defineProperties(o, {
b: {
get: function () {
return this.a + 1;
},
},
c: {
set: function (x) {
this.a = x / 2;
},
},
});
o.c = 10; // ÐапÑÑÐºÐ°ÐµÑ ÑеÑÑеÑ, коÑоÑÑй пÑиÑÐ²Ð°Ð¸Ð²Ð°ÐµÑ 10 / 2 (5) ÑвойÑÑÐ²Ñ 'a'
console.log(o.b); // ÐапÑÑÐºÐ°ÐµÑ Ð³ÐµÑÑеÑ, коÑоÑÑй возвÑаÑÐ°ÐµÑ a + 1 (ÑоеÑÑÑ 6)
То, какÑÑ Ð¸Ð· двÑÑ ÑоÑм иÑполÑзоваÑÑ Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑвойÑÑв, завиÑÐ¸Ñ Ð¾Ñ Ð²Ð°Ñего ÑÑÐ¸Ð»Ñ Ð¿ÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ ÑÑоÑÑей пеÑед вами задаÑи. ÐÑли Ð²Ñ Ñже иÑполÑзÑеÑе иниÑиализаÑÐ¾Ñ Ð¾Ð±ÑекÑа Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿ÑоÑоÑипа, Ñо, ÑкоÑее вÑего, в болÑÑинÑÑве ÑлÑÑаев, Ð²Ñ Ð²Ð¾ÑполÑзÑеÑеÑÑ Ð¿ÐµÑвой ÑоÑмой. Ðна более компакÑна и еÑÑеÑÑвенна. Ðднако, не Ñедко, вÑоÑÐ°Ñ ÑоÑма ÑвлÑеÑÑÑ ÐµÐ´Ð¸Ð½ÑÑвенно возможной, в ÑлÑÑаÑÑ , когда Ð²Ñ ÑабоÑаеÑе Ñ ÑÑÑеÑÑвÑÑÑим обÑекÑом без доÑÑÑпа к его опÑеделениÑ. ÐÑоÑÐ°Ñ ÑоÑма наилÑÑÑим обÑазом оÑÑÐ°Ð¶Ð°ÐµÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑкÑÑ Ð¿ÑиÑÐ¾Ð´Ñ JavaScript â но Ð¼Ð¾Ð¶ÐµÑ ÑделаÑÑ ÐºÐ¾Ð´ ÑложнÑм Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð¸ пониманиÑ.
Удаление ÑвойÑÑвÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑдалиÑÑ ÑвойÑÑво иÑполÑзÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ delete
. СледÑÑÑий код показÑÐ²Ð°ÐµÑ ÐºÐ°Ðº ÑдалиÑÑ ÑвойÑÑво.
//Creates a new object, myobj, with two properties, a and b.
var myobj = new Object();
myobj.a = 5;
myobj.b = 12;
//Removes the a property, leaving myobj with only the b property.
delete myobj.a;
ÐÑ Ñакже можеÑе воÑполÑзоваÑÑÑÑ delete
ÑÑÐ¾Ð±Ñ ÑдалиÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑÑ Ð¿ÐµÑеменнÑÑ, еÑли клÑÑевое Ñлово var
не бÑло иÑполÑзовано пÑи ÐµÑ Ð¾Ð±ÑÑвлении:
СмоÑÑи [delete](Expressions_and_operators#delete)
ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑиÑ.
Ð JavaScript обÑекÑÑ Ð¸Ð¼ÐµÑÑ ÑÑÑлоÑнÑй Ñип. Ðва оÑделÑнÑÑ Ð¾Ð±ÑекÑа никогда не бÑдÑÑ ÑавнÑми, даже еÑли они имеÑÑ ÑавнÑй Ð½Ð°Ð±Ð¾Ñ ÑвойÑÑв. ТолÑко ÑÑавнение двÑÑ ÑÑÑлок на один и ÑÐ¾Ñ Ð¶Ðµ обÑÐµÐºÑ Ð²ÐµÑнÑÑ true.
// Ðве пеÑеменнÑÑ
ÑÑÑлаÑÑÑÑ Ð½Ð° два обÑекÑа Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñми ÑвойÑÑвами
var fruit = { name: "apple" };
var fruitbear = { name: "apple" };
fruit == fruitbear; // веÑнÑÑ false
fruit === fruitbear; // веÑнÑÑ false
// Ðве пеÑеменнÑе ÑÑÑлаÑÑÑÑ Ð½Ð° один обÑий обÑекÑ
var fruit = { name: "apple" };
var fruitbear = fruit; // пÑиÑвоим пеÑеменной fruitbear ÑÑÑÐ»ÐºÑ Ð½Ð° обÑÐµÐºÑ fruit
// ÑепеÑÑ fruitbear и fruit ÑÑÑлаÑÑÑÑ Ð½Ð° один и ÑÐ¾Ñ Ð¶Ðµ обÑекÑ
fruit == fruitbear; // веÑнÑÑ true
fruit === fruitbear; // веÑнÑÑ true
fruit.name = "grape";
console.log(fruitbear); // веÑнÑÑ { name: "grape" } вмеÑÑо { name: "apple" }
ÐодÑобнее ÑмоÑÑиÑе ÐпеÑаÑоÑÑ ÑÑавнениÑ.
СмоÑÑиÑе Ñакжеpage(Doc) not found /ru/docs/Web/JavaScript/Guide/Details_of_the_Object_Model
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4