Javascript vue:这在不同的范围内获得相同的对象
我是Vue的新手。我看到了这样一个演示:Javascript vue:这在不同的范围内获得相同的对象,javascript,vue.js,Javascript,Vue.js,我是Vue的新手。我看到了这样一个演示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="app"> {{fullname}} </div> <script src="https://
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
{{fullname}}
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script>
var app = new Vue({
el:'#app',
data:{
firstName: 'first',
lastName: 'last'
},
computed: {
fullname: {
get: function(){
console.log('getter');
return this.firstName + this.lastName;
},
set: function (newValue) {
console.log('setter:' + newValue);
let names = newValue.split(' ')
this.firstName = names[0]
this.lastName = names[names.length - 1]
}
}
}
})
</script>
</body>
</html>
标题
{{fullname}}
var app=新的Vue({
el:“#应用程序”,
数据:{
名字:'第一',
姓氏:“last”
},
计算:{
全名:{
get:function(){
log('getter');
返回this.firstName+this.lastName;
},
set:函数(newValue){
log('setter:'+newValue);
让name=newValue.split(“”)
this.firstName=名称[0]
this.lastName=names[names.length-1]
}
}
}
})
如代码所示,有两个子函数get和set。在我看来,这两个函数中的this变量不应该相同(因为它们属于不同的范围)。但效果很好。有什么想法吗?以这段代码为例。我将在运行时使用来更改
此
值
功能测试(){
console.log(this.firstName);
}
test();//未定义
调用({firstName:“Test1”})代码>以这段代码为例。我将在运行时使用来更改此
值
功能测试(){
console.log(this.firstName);
}
test();//未定义
调用({firstName:“Test1”})代码>你有一个很大的误解<代码>此
与范围无关。它与绑定有关
什么是范围
让我们暂时不要使用CS语言,用正常的语言交谈。作用域决定是否可以访问变量。换句话说,它决定了变量的“全局性”和“局部性”
例如:
let x = 0;
function foo () {
let y = 0;
}
foo = {
a: function () {},
b: 0
}
bar = Object.create(foo); // create new instance of object foo
foo.a(); // here the function a() is bound to foo
bar.a(); // here the function a() is NOT bound to foo
let x = bar.b; // here we are NOT accessing foo.b!
x
在全局范围和foo()内部都在范围内<另一方面,code>y
仅在foo()
的范围内,在其范围外不可访问
什么是绑定
绑定与范围无关(从程序员的角度)*。绑定确定属性属于哪个对象
例如:
let x = 0;
function foo () {
let y = 0;
}
foo = {
a: function () {},
b: 0
}
bar = Object.create(foo); // create new instance of object foo
foo.a(); // here the function a() is bound to foo
bar.a(); // here the function a() is NOT bound to foo
let x = bar.b; // here we are NOT accessing foo.b!
这是一种引用对象自身绑定的机制。当从属于同一对象的方法中调用时,它允许您编写this.a()
,而不是foo.a()
和bar.a()
所以当然是一样的。它们都绑定到同一个对象:fullname
*
注意:我说的是从程序员的角度来看,因为javascript规范是从编译器编写者的角度编写的,它将作用域和绑定的概念合并到称为上下文的东西中(有时称为“作用域”,所以是的,在规范中“作用域”有时并不意味着作用域,而是意味着绑定)
你有一个很大的误解<代码>此
与范围无关。它与绑定有关
什么是范围
让我们暂时不要使用CS语言,用正常的语言交谈。作用域决定是否可以访问变量。换句话说,它决定了变量的“全局性”和“局部性”
例如:
let x = 0;
function foo () {
let y = 0;
}
foo = {
a: function () {},
b: 0
}
bar = Object.create(foo); // create new instance of object foo
foo.a(); // here the function a() is bound to foo
bar.a(); // here the function a() is NOT bound to foo
let x = bar.b; // here we are NOT accessing foo.b!
x
在全局范围和foo()内部都在范围内<另一方面,code>y
仅在foo()
的范围内,在其范围外不可访问
什么是绑定
绑定与范围无关(从程序员的角度)*。绑定确定属性属于哪个对象
例如:
let x = 0;
function foo () {
let y = 0;
}
foo = {
a: function () {},
b: 0
}
bar = Object.create(foo); // create new instance of object foo
foo.a(); // here the function a() is bound to foo
bar.a(); // here the function a() is NOT bound to foo
let x = bar.b; // here we are NOT accessing foo.b!
这是一种引用对象自身绑定的机制。当从属于同一对象的方法中调用时,它允许您编写this.a()
,而不是foo.a()
和bar.a()
所以当然是一样的。它们都绑定到同一个对象:fullname
*
注意:我说的是从程序员的角度来看,因为javascript规范是从编译器编写者的角度编写的,它将作用域和绑定的概念合并到称为上下文的东西中(有时称为“作用域”,所以是的,在规范中“作用域”有时并不意味着作用域,而是意味着绑定)
此
在运行时确定。这取决于函数的调用方式。对不起,我不明白你的意思。你能详细解释一下吗?这是在运行时确定的。这取决于函数的调用方式。对不起,我不明白你的意思。请注意,这不仅适用于Javascript,而且适用于所有面向对象的语言。是的,在java和C++语言中,人们混淆了范围和绑定,并把所有的“范围”都称为“范围”,在爪哇,它不让人困惑,它不允许你在类之外声明变量——因此实际上java没有全局范围——这意味着它不需要范围,只需要绑定。所以在Java中调用绑定范围并不令人困惑。非常感谢,您的解释对我帮助很大!请注意,这不仅适用于Javascript,而且适用于所有面向对象的语言。是的,在java和C++语言中,人们混淆了范围和绑定,并把所有的“范围”都称为“范围”,在爪哇,它不让人困惑,它不允许你在类之外声明变量——因此实际上java没有全局范围——这意味着它不需要范围,只需要绑定。所以在Java中调用绑定范围并不令人困惑。非常感谢,您的解释对我帮助很大!