Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
var clone = Object.create;
// Пример 1:
// телефонный справочник
var phone={
'Вася':'+7987654',
'Петя':'+7654321'
}
function number(name){
if(name in phone)return phone[name];
return 'Пользователь отсутствует в базе'
}
console.log(number('Вася')); //=>'+7987654'
console.log(number('hasOwnProperty'));//=>function hasOwnProperty() { [native code] }
// Пример 2:
var phone={
'Вася':'+7987654',
'Петя':'+7654321'
}
function number(name){
if(phone.hasOwnProperty(name))return phone[name];
return 'Пользователь отсутствует в базе'
}
console.log(number('Вася')); //=>'+7987654'
phone['hasOwnProperty']='+7666666'; //=>Добавляем нового абонента
console.log(number('Вася')); //=>Упс
this.name = name||"Unnamed"
?A = function() {};
A.prototype = { a: 3, constructor: A };
inherits(A,B); // некая функция, наследующая А от В
A = Class(B, { constructor: function() {}, a: 3 });
A = function() {};
A.prototype = { a: 3 };
a = Object.create(B.prototype);
A.call(a);
for( var i in A.prototype ) {
a[ i ] = A.prototype[ i ];
}
A = function( x, y ) { this.x = x; this.y = y; };
a = new A(1,2);
a = Object.create(proto);
a.x = 1;
a.y = 2;
a = Object.create(proto);
a.init(1,2)
a = Object.create(proto).init(1,2);
Object.create(proto,{x:{value:1},y:{value:2}})
// Object.getOwnPropertyDescriptors есть в ES6
var getDescs=Object.getOwnPropertyDescriptors||function(obj){
return Object.getOwnPropertyNames(obj).reduce(function(rez,k){
rez[k]=Object.getOwnPropertyDescriptor(obj,k);
return rez},{})
}
function create(obj,props){
return Object.create(obj,getDescs(props))
}
// Используем
create(proto,{x:1,y:2});
a.width = 1; a.height = 2; a.size = 3; a.draggable = true; a.editable = true; ...
a.init(1,2,3,true,true ...)
a.setValues({width: 1, height: 2, size: 3, draggable: true, editable: true ...})
donald.quack()
после var donald = new TalkingDuck("Donald");
прототип является классом и экземпляром объединенными в одну сущность, грубо говоря, Singleton'ом
var obj = {
get lazy() {
delete this.lazy;
return this.lazy = "Лениво инициализированное свойство " + this.name;
},
//set lazy(value) {
// delete this.lazy;
// return this.lazy = value;
//},
name: "БезИмени"
};
function F(i) {
this.i = i;
}
F.prototype = {
get lazy() {
delete this.lazy;
return this.lazy = "Lazy: " + this.i;
}
};
var f1 = new F(1);
var f2 = new F(2);
alert(f1.lazy + "\n" + f2.lazy); // 1 и 2
f1.i = f2.i = 3;
alert(f1.lazy + "\n" + f2.lazy); // 3 и 3
setting a property that has only a getter:)
function F(i) {
this.i = i;
}
F.prototype = {
get lazy() {
var value = "Lazy: " + this.i;
Object.defineProperty(this, "lazy", {
value: value,
writable: true,
enumerable: true
});
return value;
}
};
var f1 = new F(1);
var f2 = new F(2);
alert(f1.lazy + "\n" + f2.lazy);
f1.i = f2.i = 3;
alert(f1.lazy + "\n" + f2.lazy);
Геттер так не удаляетсяа зачем ему удалятся из прототипа? Инстансы работают как надо, чем вам не нравится 1 и 2 и 3 и 3?
Нужны ли в JavaScript классы?