相关疑难解决方法(0)

为什么window [id] === document.getElementById(id)

我注意到在几个浏览器中,dom元素只能通过它们的id访问:

HTML

<div id="chocolat"></div>
Run Code Online (Sandbox Code Playgroud)

JS

alert(chocolat.id); //alerts "chocolat
chocolat; //points to the node
window.chocolat; //idem
chocolat === document.getElementById('chocolat'); // true
Run Code Online (Sandbox Code Playgroud)

(在这里测试:http://jsfiddle.net/GUUPT/)这适用于Chrome上的某些版本的IE,但它不适用于Firefox(5).

我好奇这是从哪里来的?这是标准吗?

javascript

7
推荐指数
1
解决办法
1363
查看次数

JavaScript:通过局部变量引用主机功能

可能重复:
JavaScript函数别名似乎不起作用

为什么这不起作用?

function foo() {

    var g = document.getElementById;

    g('sampleID');

} 
Run Code Online (Sandbox Code Playgroud)

在Chrome:Uncaught TypeError: Illegal invocation
...和Firefox中引发此错误:Error: uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object"

它适用于IE9测试版!!

演示: http ://jsfiddle.net/ugBpc/

javascript

6
推荐指数
1
解决办法
549
查看次数

"这个"在JavaScript中是如何工作的?

我知道关于这个话题还有其他一些帖子,但它们仍让我感到困惑.

我已经包含了jQuery和所有内容,我有一个像这个例子的简单的javascript类:

function CarConstructor(){
  this.speed=19; // in mph
  this.make="Ford";
  this.fillKph=fillKph;
}

function fillKph(){
  $("#kphdiv").html(this.speed*1.61);
}

car1 = new CarConstructor();
car1.fillKph();
Run Code Online (Sandbox Code Playgroud)

现在我知道该代码段不起作用,并且没有正确构建.

"this"关键字引用了我的dom元素,其id为"kphdiv".

我的问题是处理这个问题的最佳方法是什么.

我见过一种方法,你设置一些等于此的变量(绑定它),然后使用该变量来引用你的对象.例如:

function CarConstructor(){
  this.speed=19; // in mph
  this.make="Ford";
  this.fillKph=fillKph;
}

function fillKph(){
  var me=this;
  $("#kphdiv").html(me.speed*1.61);
}

car1 = new CarConstructor();
car1.fillKph();
Run Code Online (Sandbox Code Playgroud)

我也可以让我成为一个全球变量...我不知道.

如果有另一种/更好的方式,我只是好奇.

javascript this

4
推荐指数
1
解决办法
1965
查看次数

为什么不能为document.getElementById()设置别名?

可能重复:
JavaScript函数别名似乎不起作用
将document.getElementById设置为变量

如果可能的话,代码会更有效:

var min = document.getElementById;
Run Code Online (Sandbox Code Playgroud)

然后document.getElementById()使用min().

不试图编写缩小的代码,但在这种特殊情况下,可以减少范围查找并缩短某些行.

这是语法问题还是对语言的限制?

javascript

4
推荐指数
1
解决办法
757
查看次数

var cl = console.log不起作用

我在Angular应用程序中这样做了:

var cl = console.log;
cl(123);
Run Code Online (Sandbox Code Playgroud)

但是,我有以下错误消息:

Uncaught TypeError: Illegal invocation
Run Code Online (Sandbox Code Playgroud)

这发生在Chrome中.它适用于Nodejs.

我糊涂了.这是非法代码吗?

javascript

4
推荐指数
1
解决办法
180
查看次数

将document.getElementById分配给另一个函数

我试图在JavaScript中执行以下操作:

var gete = document.getElementById;
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误(来自FireBug的控制台):

uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)" location: "JS frame :: http://localhost:8080/im_ass1/ :: anonymous :: line 15" data: no]

现在显然我可以将函数包装如下:

var gete = function (id) {
    return document.getElementById(id);
};
Run Code Online (Sandbox Code Playgroud)

但是,在将函数分配给另一个名称时,我得到上述异常的原因是什么?

javascript first-class-functions

3
推荐指数
2
解决办法
1701
查看次数

为什么我不能直接引用document.createElement?

在创建大量DOM元素时,document.createElement和朋友可以添加大量的字节和丑陋.我知道我可以创建自己的子程序,或使用innerHTML或其他什么,但为什么我不能这样做:

var $c = document.createElement;
var newP = $c('p');
Run Code Online (Sandbox Code Playgroud)

Firebug抱怨这条消息:

"Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)"
Run Code Online (Sandbox Code Playgroud)

显然,我做了一些不允许的事情.为什么不呢?它允许其他东西,例如Array.splice或Math.min.

javascript dom

3
推荐指数
1
解决办法
287
查看次数

在javascript中实现支持对象方法作为映射函数的映射?

我最近尝试在javascript中使用map的实现来创建一堆项目,然后将它们应用于对象添加方法.

首先是沼泽标准的地图实现.

var map = function (fn, a)
{
    for (i = 0; i < a.length; i++)
    {
        a[i] = fn(a[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

建立.

var translateMenu = new Menu;

var languages = [ ['Chinese'   , 'zh-CN']
                , ['German'    , 'de']
                , ['French'    , 'fr']
                , ['Portugese' , 'pt']
                , ['Hindi'     , 'hi']
                ];
Run Code Online (Sandbox Code Playgroud)

我的功能......(不是匿名的,因为它在将translateMenu添加到mainMenu时会被使用.)

var langItem = function (language, subMenu) 
    { 
       return new MenuItem(language[0], 'http://translate.google.com/translate?u=www.example.com&hl=en&ie=UTF-8&tl=en&sl=' + language[1] , "" , subMenu); 

    }

map ( langItem , languages );
Run Code Online (Sandbox Code Playgroud)

这一切都运行良好,我现在有一个MenuItems阵列扔掉.

尝试调用 …

javascript php scope functional-programming

2
推荐指数
1
解决办法
3348
查看次数