Javascript 定义后未定义函数变量
我有这个密码Javascript 定义后未定义函数变量,javascript,node.js,Javascript,Node.js,我有这个密码 var Point = function (startX, startY) { var x = startX var y = startY } function somefunc (data) { var newPoint = new Point(data.x, data.y); console.log(data.x + ":" + data.y); console.log(newPoint.x + ":" + newPoint.y); } 我进
var Point = function (startX, startY) {
var x = startX
var y = startY
}
function somefunc (data) {
var newPoint = new Point(data.x, data.y);
console.log(data.x + ":" + data.y);
console.log(newPoint.x + ":" + newPoint.y);
}
我进入控制台
0:0
undefined:undefined
为什么不分配新点值?用
此访问替换var
声明。您需要将属性附加到将通过new
创建的当前对象。如果不使用此
,则在调用函数时创建它们,并在函数调用后将其删除
var Point=函数(startX,startY){
这个.x=startX;
这个。y=星形;
}
函数somefunc(数据){
var newPoint=新点(data.x,data.y);
console.log(data.x+“:”+data.y);
log(newPoint.x+“:”+newPoint.y);
}
somefunc({x:1,y:1})代码>将var
声明替换为此
访问。您需要将属性附加到将通过new
创建的当前对象。如果不使用此
,则在调用函数时创建它们,并在函数调用后将其删除
var Point=函数(startX,startY){
这个.x=startX;
这个。y=星形;
}
函数somefunc(数据){
var newPoint=新点(data.x,data.y);
console.log(data.x+“:”+data.y);
log(newPoint.x+“:”+newPoint.y);
}
somefunc({x:1,y:1})代码>Javascripts继承一开始可能会让人困惑。使用new
调用函数时,它会创建一个新对象,特殊的此
变量将引用该对象。然后,该函数将自动返回此
。因此,要设置该对象的属性,需要将它们分配给this
,因为构造函数的变量不会以任何方式公开:
function Point(x, y){
this.x = x;
this.y = y;
}
其行为等同于:
function Point(x, y){
var context = {};
context.x = x;
context.y = y;
return context;
}
但是,您也可以使用javascriptsclass
语法,这可能看起来更符合逻辑:
class Point {
constructor(stattX, startY){
this.x = startX;
this.y = startY;
}
// class methods here...
}
Javascripts继承一开始可能会令人困惑。使用new
调用函数时,它会创建一个新对象,特殊的此
变量将引用该对象。然后,该函数将自动返回此
。因此,要设置该对象的属性,需要将它们分配给this
,因为构造函数的变量不会以任何方式公开:
function Point(x, y){
this.x = x;
this.y = y;
}
其行为等同于:
function Point(x, y){
var context = {};
context.x = x;
context.y = y;
return context;
}
但是,您也可以使用javascriptsclass
语法,这可能看起来更符合逻辑:
class Point {
constructor(stattX, startY){
this.x = startX;
this.y = startY;
}
// class methods here...
}
您正在点内声明一个新变量“x”和“y”,该变量只能在函数内访问,因为这样声明的变量使其成为局部变量。可以对同一点使用闭包,以便创建的每个点实例中都存储有值
var Point = function (startX, startY) {
return {
x: startX,
y: startY
}
}
var newPoint1 = new Point(10, 20);
var newPoint2 = new Point(20, 10);
console.log(newPoint2.x + ":" + newPoint2.y);
console.log(newPoint2.x + ":" + newPoint2.y);
您正在点内声明一个新变量“x”和“y”,该变量只能在函数内访问,因为这样声明的变量使其成为局部变量。可以对同一点使用闭包,以便创建的每个点实例中都存储有值
var Point = function (startX, startY) {
return {
x: startX,
y: startY
}
}
var newPoint1 = new Point(10, 20);
var newPoint2 = new Point(20, 10);
console.log(newPoint2.x + ":" + newPoint2.y);
console.log(newPoint2.x + ":" + newPoint2.y);
你错过了new
关键字的魔力
通常,当我们创建一个对象时,当您使用new关键字时,我们不会显式地从函数返回一个对象,就像它为我们所做的那样
var Point = function (startX, startY) {
var obj = {} // common part
obj.x = startX;
obj.y = startY;
return obj //common part
}
我们称之为没有new
关键字,如下所示,工作已经完成
var newPoint = Point(data.x, data.y);
console.log(newPoint.x + ":" + newPoint.y);
当我们创建一个构造函数时,我们做得太多了,因为对象声明和返回部分在每个函数中都很常见
i、 e
var obj = {}
return obj
因此,new关键字为您提供了声明对象并隐式返回它的样板文件
var Point = function (startX, startY) {
var this = {} // implicit declraration by new keyword
this.x = startX;
this.y = startY;
return this //implicit return by new keyword
}
因此,您必须将您的变量绑定到它,然后返回。您缺少了new
关键字的魔力
通常,当我们创建一个对象时,当您使用new关键字时,我们不会显式地从函数返回一个对象,就像它为我们所做的那样
var Point = function (startX, startY) {
var obj = {} // common part
obj.x = startX;
obj.y = startY;
return obj //common part
}
我们称之为没有new
关键字,如下所示,工作已经完成
var newPoint = Point(data.x, data.y);
console.log(newPoint.x + ":" + newPoint.y);
当我们创建一个构造函数时,我们做得太多了,因为对象声明和返回部分在每个函数中都很常见
i、 e
var obj = {}
return obj
因此,new关键字为您提供了声明对象并隐式返回它的样板文件
var Point = function (startX, startY) {
var this = {} // implicit declraration by new keyword
this.x = startX;
this.y = startY;
return this //implicit return by new keyword
}
因此,必须将变量绑定到要返回的对象。变量不是上下文的属性。使用此
访问上下文并为其分配属性。变量不是上下文的属性。使用此
访问上下文并为其分配属性。