-1

所以这是一些代码

var name = 'ali';

function say() {
  alert(name);
}

所以这会提醒'ali',因为名称函数由全局对象拥有,现在下面的代码

var oobj  { 
  var name: 'raziq',
  say:function () {
    alert (name);
  }
}

oobj.say();

所以现在say函数归oobj对象所有,所以name属性应该提醒'raziq'而不是'ali'。顺便说一句,我知道这个关键字的用法

我的问题是什么会被警告和 y ?

4

3 回答 3

8

- -更新 - -

基本上,一个是变量,一个是属性。您可以通过两种不同的方式访问它们

在您的问题中,您声明了一个变量name和一个函数。在任何时候,如果您不专门重新定义name,那么它将始终是该值。

在你的情况下,你认为你正在重新定义name你这样做

var oobj = {
    name: 'raziq'

但你不是。您正在声明 oobj 对象的属性。即,如果我尝试从对象外部提醒名称,它会查找名称的变量声明,它会找到您设置为“ali”的全局变量。为了得到property名字,你必须告诉它找到它的“路径”。路径是oobj.name

你在一个对象里面,所以你不要使用var =and ;。你用逗号,,你就这样做say: function() {

var oobj = {
    name: 'raziq',
    say: function () {
        alert(this.name);
    }
}
oobj.say();
于 2013-03-06T14:22:28.777 回答
1

由于 Jeff 已经发布了正确的答案,我只想指出,即使是第一个示例也没有按预期工作。内部alert将向您展示该name功能。

所以这:

function name() {
  alert(name);
}

name()

将提示消息:

function name() {
  alert(name);
}
于 2013-03-06T14:40:22.713 回答
0

也许你正在寻找这个

var oobj = { 
    name : 'raziq',
    say : function (){
            alert (oobj.name);
        }
}

oobj.say();

请参阅更新的小提琴示例扩展的小提琴示例

于 2013-03-06T14:24:04.987 回答