в сети я читаю:
"Ну, Javascript или, что лучше, ECMAScript, это объектно-ориентированный язык, так что ... все, что не является примитивным типом (неопределенный, ноль, число, строка,логическое значение) - это объект (или экземпляр) в JavaScript, где объект является «сумкой» свойств и методов ... »
и:
КогдаФункция вызывается с ключевым словом «new», затем функция называется функцией конструктора и возвращает новый экземпляр.В таких случаях значение «this» относится к вновь созданному экземпляру.
Теперь мой код:
function fe(){
var i;
var j = 0;
return j;
};
process.stdout.write("fe --> "); console.log(fe); // [Function: fe]
process.stdout.write("fe() --> "); console.log(fe()); // 0
var vfe = new fe();
process.stdout.write("vfe --> " + vfe + " - "); console.log(vfe); [object Object] - fd {}
var fd = function(){
var i;
var j = 0;
};
process.stdout.write("fd --> "); console.log(fd); // [Function: fd]
process.stdout.write("fd() --> "); console.log(fd()); // undefined
var vfd = new fd();
process.stdout.write("vfd --> " + vfd + " - "); console.log(vfd); [object Object] - fd {}
В первом у меня есть возвращаемое значение, а новый возвращаетобъект как в последнем случае: у меня есть объект {}, и поэтому я могу добавить свойства и методы
в другом случае:
function fe(){
var i;
var j = 0;
return fe;
};
process.stdout.write("fe --> "); console.log(fe); // [Function: fe]
process.stdout.write("fe() --> "); console.log(fe()); // [Function: fe]
var vfe = new fe();
process.stdout.write("vfe --> "); console.log(vfe); // [Function: fe]
var fd = function(){
var i;
var j = 0;
return fd;
};
process.stdout.write("fd --> "); console.log(fd); // [Function: fd]
process.stdout.write("fd() --> "); console.log(fd()); // [Function: fd]
var vfd = new fd();
process.stdout.write("vfd --> "); console.log(vfd); // [Function: fd]
В этом случае у меня есть значение или функциявозвращено, что все, кроме объекта .... Теперь: id: «Все, что не является примитивным типом (неопределенным, нулевым, числом, строкой, логическим значением), является объектом (или экземпляром) в JavaScript, где объект - это»сумка "свойств и методов ..." не так верна во всех ситуациях?
Другая ситуация заключается в следующем:
function fe () {
var pri_var1;
// private, not accessible from extern
function pri_fun1(){ return "pri_fun1"; }
// private, not accessible from extern
function pri_fun2(){ return "pri_fun2"; }
//static property
fe.sta_var1 = 0; //static property ....is never a good idea but...for folks!!!
//static method
fe.sta_fun1 = function(){return pri_fun2();}
//public not heritable
this.pub_fun1 = function(){return "pub_fun1";}
//public heritable
fe.prototype.pub_her_fun1 = function() { return "pub_her_fun1";}
//return fe;
}
var obj2 = new fe();
console.log("obj2 --> ",obj2);
console.log(obj2.pub_fun1());
console.log(fe.sta_fun1());
Если я раскомментирую // return fe;«узел» говорит: console.log (obj2.pub_fun1 ());^
TypeError: obj2.pub_fun1 не является функцией ... Если я оставлю комментарий, все также будет работать ....
Небольшая путаница с функцией и объектом в (снова):
"Ну, Javascript или лучше ECMAScript - это объектно-ориентированный язык, поэтому все, что не является примитивным типом (неопределенный, ноль, число, строка, логическое значение), является объектом (или экземпляр) в JavaScript, где объект представляет собой «мешок» свойств и методов ... »
заранее спасибо
Хорошо ... Я постараюсь бытьточнее.Я прочитал «Все, что не является примитивным типом (неопределенным, нулевым, числовым, строковым, логическим), является объектом (или экземпляром) в JavaScript, где объект является« мешком »свойств и методов ...» Следовательно, функциятакое объект?Каждая функция?Возьмите функцию:
function fe(){
return 1;
};
и следующие инструкции:
console.log(fe); // [Function: fe]
console.log(fe()); // 1
var vfe = new fe();
console.log(vfe); // fe {}
, если я хорошо прочитал: fe - это функция, которая, будучи не примитивной, является «объектом» (какого родаобъекта? Может быть, несколько сложное представление типа [Function: fe] неправильно вызвало объект не OO-способом?) ... но оно становится объектом OO-способом "bag" {} только после нового (vfe) ...., но он также может быть вызван (fe ()) и выдает значение (1) ... или может возвращать себя или по умолчанию undefined ... Некоторые функции не могут быть выполнены, а только "созданы"?и другая функция может содержать функции, которые являются классической функцией для выполнения, чтобы получить нормальное значение, но не для создания экземпляра ???Очень, очень странное поведение ... Могу ли я помочь с точки зрения именования, дизайна и границ этого беспорядка?еще раз спасибо ...