Различия между членами функции JavaScript
Я все еще запутался в этой части закрытия, хотя много читал об этом (также здесь, на сайте). Взял код отсюда: http://www.crockford.com/javascript/private.html
So what is the different between this:
function Container(param) {
this.member = param;
}
...And this -
function Container(param) {
var member = param;
// and also in case it's without "var", I.e. global
}
Пожалуйста, объясните, что происходит, когда вы создаете объект для каждого случая -
var myContainer = new Container('abc');
Также - Каковы отличия доступа к параметру от объекта? И можете ли вы привести пример для функции в качестве параметра и возвращающей функции?
Большое спасибо!
2 ответа
В функции Test, когда мы объявляем переменную obj1 с новым Test. Он был создан с помощью функции contructor, которая называется "Test".
Этот процесс похож на то, как мы вызываем функцию обычным способом. Конечно, это делает локальную переменную "имя". Когда мы объявили выражение функции, которое называется "this.getName", это означает выражение для функции "Test".
Но когда мы вызываем "новый тест". Он возвращает объект, у которого есть вызов значения ключа "getName:function{}". Когда мы вызываем "obj1.getName", он возвращает переменную "name". Но он не может найти локальную переменную getName "name", поэтому он будет искать область видимости своего родителя, чтобы найти, существует ли переменная "name", он не остановится, пока мы не получим ее или просто не вернем "undefined". Это делает "кавычку", чтобы сохранить переменную "имя" в памяти, но мы просто можем получить ее через функцию "getName".
Для всего этого мы делаем частную переменную в нашей функции "Тест".:) Надеюсь, что это может помочь.
Вот мое мнение: когда вы используете new для создания объекта через функцию, переменная initial by var является локальной переменной:
function Test(){
var name = "John";
this.getName = function(){
return name;
}
}
var obj1 = new Test();
console.log(obj1.name); //undefined
console.log(obj1.getName()); //John
Это означает, что вы не можете прочитать переменную непосредственно за пределами функции. Это похоже на приватную переменную в Java или C++;
но когда вы используете this.name = "John", это другая ситуация:
function Test2(){
this.name = "John";
}
var obj2 = new Test2();
console.log(obj2.name) //"John"
вы можете читать переменную напрямую, это как переменная public в java или C++.
Надеюсь, это может сработать для вас.:)