Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   вопрос по созданию функции (https://javascript.ru/forum/misc/56069-vopros-po-sozdaniyu-funkcii.html)

DennisMatveyev 28.05.2015 15:41

вопрос по созданию функции
 
добрый день, всем!.. подскажите, пжлст, как решить задачу:
Есть объект Person (name, age, method), и есть объект Student, который наследует Person и имеет свой method2.

1.Нужно реализовать функцию type(), которая принимает объект Student или Person и возвращает его тип, НЕ используя оператор instanceof, а используя проверку наличия свойств/методов объектов.

2.Модифицировать функцию так, что она не принимает объект, а оперирует с объектом this.
Функция объявляется вне контекста, но вызывается на определенном объекте при помощи call/apply/bind.

Спасибо!

tsigel 28.05.2015 15:54

DennisMatveyev,
Не вижу ваших попыток решения проблемы.
http://javascript.ru/forum/misc/3706...-otvetili.html

Decode 28.05.2015 17:04

function Person(name, age) {
	this.name = name;
	this.age = age;
}

Person.prototype.method = function() {
	alert(this.name + this.age);
};

function Student(name, age) {
	Person.apply(this, arguments);
}

Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;
Student.prototype.method2 = function() {
	alert("Bla-bla-bla");
};

var vasya = new Person('Василий', 25);
var petya = new Student('Петя', 18);

function type() {
	(this.method2 !== undefined) ? alert('Student') : alert('Person');
}

type.call(vasya);
type.call(petya);

indeterm 28.05.2015 20:45

getType=function(object){return object? object.type : this.type}

Person={
 type: "Person",
 extend: function(o){
  for(var i in o) {if(!o.hasOwnProperty(i)) return this; this[i]=o[i]} return this
 },
 clone: function(){
  return Object.create(this)
},
 getType: getType,
 getData: function(){return this.name+" "+this.age}
}

Student=Person.clone().extend({
 type: "Student",
 getFuckingData: function(){return "I am "+this.name+" and I'm motherfucker"}
})

john=Student.clone().extend({name: "John", age: 19})

with(console){
 log(getType(john))
 log(getType.call(john))
 log(getType.apply(john))
 log(getType.bind(john)())
 log(john.getType())
 log(john.getData(), john.getFuckingData())
}

// ::: Student
// ::: Student
// ::: Student
// ::: Student
// ::: Student
// ::: John 19 I am John and I'm motherfucker

DennisMatveyev 29.05.2015 11:25

класс.... спасибо большое!:victory:


Часовой пояс GMT +3, время: 12:11.