Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.189.180.76] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Доброго времени суток!
скажите почему след код не выводит измененое имя и возраст? var person = (function (name, age) { var $name = name, $age = age; return { name: $name, age: $age, setName: function (name) { $name = name;}, setAge: function (age) { $age = age;} }; })('Gregory', 42); person.setName('Miller'); person.setAge(30); console.log(person.name); console.log(person.age); Выхлоп: Gregory 42 а вот если через функции доступа то все пучком var person = (function (name, age) { var $name = name, $age = age; return { getName: function () { return $name; }, getAge: function () { return $age; }, setName: function (name) { $name = name;}, setAge: function (age) { $age = age;} }; })('Gregory', 42); person.setName('Miller'); person.setAge(30); console.log(person.getName()); console.log(person.getAge()); Выхлоп: Miller 30 |
Сообщ.
#2
,
|
|
|
Сообщ.
#3
,
|
|
|
Да потому что не понятно на кой фиг так вообще писать. Чем тебе не подошёл вариант:
class Person { name = ''; age = 0; } И зачем изобретать велосипед с замыканием контекста - вообще хз |
Сообщ.
#4
,
|
|
|
Цитата Serafim @ Да потому что не понятно на кой фиг так вообще писать. Чем тебе не подошёл вариант: class Person { name = ''; age = 0; } И зачем изобретать велосипед с замыканием контекста - вообще хз я по книжке учу хочу работать в стиле JavaScript без классов например: // Модуль spa // var spa = (function ($) { var person = { name: 'Gregory', age: 42, print: function (container) { var s = '<h1>' + this.name + ', ' + this.age + '</h1>'; $(container).html(s); } } person.name = 'Miller'; person.age = 30; return { person: person } }(jQuery)); // обращаемся к модулю spa, когда модель DOM будет готова // jQuery(document).ready( function () { spa.person.print(jQuery('#spa')); } ); красиво за душу берет мне бесклассовый подход JavaScript затянул собственно в JavaScript ни типов ни классов тока объекты и ламбди я просто кайфую от JavaScript кстати тока в JavaScript я наконец понял что такое замыкания |
Сообщ.
#5
,
|
|
|
Цитата Cfon @ красиво за душу берет мне бесклассовый подход JavaScript затянул собственно в JavaScript То есть в стандарт эти самые классы добавляют, добавляют, а ты без них решил? |
Сообщ.
#6
,
|
|
|
Цитата Астарот @ Цитата Cfon @ красиво за душу берет мне бесклассовый подход JavaScript затянул собственно в JavaScript То есть в стандарт эти самые классы добавляют, добавляют, а ты без них решил? да пускай добавляют я без них хочу |
Сообщ.
#7
,
|
|
|
тогда так:
let Person = (function() { function Person(name, age) { this.name = name; this.age = age; } Person.prototype.setAge(age) { this.age = age; } Person.prototype.setName(name) { this.name = name; } return Person; })(); // let person = new Person('Vasya', 23); // {name: 'Vasya', age: 23} person.setName('Petya'); // {name: 'Petya', age: 23} |
Сообщ.
#8
,
|
|
|
Цитата Serafim @ тогда так: let Person = (function() { function Person(name, age) { this.name = name; this.age = age; } Person.prototype.setAge(age) { this.age = age; } Person.prototype.setName(name) { this.name = name; } return Person; })(); // let person = new Person('Vasya', 23); // {name: 'Vasya', age: 23} person.setName('Petya'); // {name: 'Petya', age: 23} так сложновато пока такой стиль не юзаю |
Сообщ.
#9
,
|
|
|
вот создание объекта основе прототипа (подглядел в одной умной книжке )
var Person = { name: '', age: 0, toString: function() { return this.name + ' is a ' + this.age + ' year old.'; }, ctor: function(newObj) { var person = Object.create(this); var key; for (key in newObj) { if (newObj.hasOwnProperty(key) && Object.prototype.hasOwnProperty.call(this, key)) { person[key] = newObj[key]; } } return person; }, } var gregory = Person.ctor({ name: 'Gregory', age: 42, }); console.log(gregory); |
Сообщ.
#10
,
|
|
|
|
Сообщ.
#11
,
|
|
|
|
Сообщ.
#12
,
|
|
|
Нельзя тебе в банду, Шарапов...
|
Сообщ.
#13
,
|
|
|
Цитата Cfon @ for (key in newObj) { ---- for (let key of Object.keys(newObj)) { ... } |
Сообщ.
#14
,
|
|
|
чем отличается?
|
Сообщ.
#15
,
|
|
|
p.s.
class Person { call constructor(args = {}) { for (let key of Object.keys(args)) { this[key] = args[key]; } } toString() { return Object.keys(this).map(key => `${key}: ${this[key]}`); } } let person = Person({name: 'Vasya', age: 42}); console.log(person); Добавлено Цитата Cfon @ чем отличается? тем, что ты бегаешь по итератору, например по Symbol.iterator, а через in - по всем полям |