小编dal*_*lin的帖子

'this'关键字在Javascript中返回对象原型中的窗口对象?

我在类中有以下功能:

MyClass.prototype.myFunction = function(item, args) 
{       
    console.log(this);
}
Run Code Online (Sandbox Code Playgroud)

从我无权更改的外部库调用此函数.当它被调用时,控制台将"this"记录为窗口对象而不是实际的实例化对象.在搜索stackoverflow时,我发现了这个引用:

这是根据方法的调用方式设置的,而不是根据方法的编写方式设置的.所以对于obj.method(),这将在method()中设置为obj.对于obj.method.call(x),method()内部将设置为x.它取决于它的调用方式.这也意味着如果你将它作为回调传递给例如onclick,这将被设置为全局窗口对象而不是你期望的.

我假设这是正在发生的事情,我无法改变它的调用方式.我的问题是,无论如何,无论如何调用对象的实例,它是否存在?

javascript prototype this prototypejs function-prototypes

16
推荐指数
2
解决办法
5291
查看次数

如何创建一个JavaScript"类",将方法添加到原型并正确使用"this"

我总是被告知在JavaScript中模拟类的正确方法是在函数外添加方法,这将是你的类,如下所示:

function myClass()
{
    this.myProp = "foo";
}

myClass.prototype.myMethod = function()
{
    console.log(this);
}

myObj = new myClass();
myObj.myMethod();
Run Code Online (Sandbox Code Playgroud)

我一直在遇到this我的方法解析为全局Window对象的问题,最好在quirksmode上解释.

我已经尝试过做var that = this;Koch提到的技巧,但由于我的方法不在我的课堂上,我的that变量不再在范围内了.也许我只是不完全理解它.

有没有办法可以在JavaScript中创建一个类,其中每个实现都不重新创建方法,并且this总是指向对象?

编辑:

上面的简化代码可以工作,但我已经多次在上面声明一个与上面完全相同的"类",当我调用时myObj.myMethod(),它作为一个Window对象返回.我已经阅读了this我能找到的每一个解释,例如我链接到的那个,但仍然不明白为什么这个问题有时会发生.是否可以像上面this那样编写代码的情况Window

这是我目前遇到问题的实现,但当我将其简化为几行时,我不再有问题:

HTML文件:

<script type="text/javascript" src="./scripts/class.Database.js"></script>
<script type="text/javascript" src="./scripts/class.ServerFunctionWrapper.js"></script>
<script type="text/javascript" src="./scripts/class.DataUnifier.js"></script>
<script type="text/javascript" src="./scripts/main.js"></script>
Run Code Online (Sandbox Code Playgroud)

class.DataUnifier.js:

function DataUnifier()
{
    this._local = new Database();
    this._server = new ServerFunctionWrapper();
    this.autoUpdateIntervalObj = null;
}

DataUnifier.prototype.getUpdates = function() …
Run Code Online (Sandbox Code Playgroud)

javascript methods prototype this

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

还有什么理由仍然使用数据库表和列的蛇案例?

回到我开始使用数据库设计时,出于某种原因,建议您始终对表格和列使用snake case(my_table_name).我认为在MySQL中尤其如此.理由是存在资本化将丢失或执行的情况.快进到今天,我看到很多人使用Pascal Case("MyTableName"),我更喜欢.

有没有理由继续使用蛇形表格和列名?是否存在可能丢失或强制执行大写的情况(例如,如果更改数据库引擎,操作系统等)?

mysql database database-design relational-database

6
推荐指数
2
解决办法
2870
查看次数

在镀铬的div按钮上的小死角

我无法解释这个.我有一个div,它是一个按钮.我使用:active psuedo类和position:relative; 单击时向下轻微移动它,给它一个动画.出于某种原因,Chrome中此按钮上有一个小的死区,位于文本和按钮边缘之间.psuedo类仍然会触发,但按钮上的Javascript却没有.如果我删除相对位置,问题就会消失.这也发生在Firefox中,但Firefox中的死区位于按钮移开的边缘,这是有道理的,但也需要修复.

我创建了一个JSFiddle来显示问题:http://jsfiddle.net/dillydadally/CUHA7/6/

知道为什么会这样吗?有办法解决吗?

javascript position google-chrome css-position onclick

5
推荐指数
1
解决办法
252
查看次数

手动而不是使用Chrome工作区自动将css保存在元素标签上?

我刚刚设置了Chrome工作区,但它正在做一些让我的工作流程感到不安的事情.如果我在源选项卡中编辑源文件,它将不会保存它,直到我告诉它 - 这是好的.但是如果我在元素选项卡中编辑样式,它会自动保存它,而不会告诉它.

我可以看到有些人会喜欢这个,但我喜欢尝试很多款式.如果我喜欢我的改变,我会保存它们.如果我不这样做,我就扔掉它们.实际上,它会在我执行更改时自动保存更改,因此我一直担心搞砸我的页面并丢失其原始状态.我不再自由地进行实验而不必担心丢失我的原始页面.

有没有办法配置Chrome,因此在我告诉他们保存之前,我在元素标签中所做的更改不会保存?或者也许有一个选项可以在加载网页时还原对其状态的更改?还有其他解决方案吗?你如何处理Chrome中的实验?

css google-chrome stylesheet google-chrome-devtools

5
推荐指数
1
解决办法
401
查看次数

有什么情况我必须使用.attr()over .prop()吗?

据我所知,.prop()函数可以执行.attr()函数可以执行的所有操作,但通常更安全,更简单.

例如:

  • 如果我想获取HTML中复选框的默认状态,我可以$('myCheckbox').prop('defaultChecked')(而不是$('myCheckbox').attr('checked')).这实际上似乎比使用更安全.attr('checked'),因为如果动态更改复选框,属性可能会丢失它的值,同时.prop('defaultValue')保持值(例如http://jsfiddle.net/p1Lrgwnb/1/)
  • 虽然我经常看到.attr()有值,如坚持使用id,并name在计算器上的例子,.prop()正常工作与那些为好..attr()除了传统的惯例和习惯之外,我不知道任何理由似乎更适合这些价值观.

是否有一个用例我需要使用.attr()或该.prop()功能不会给我所需的信息?

编辑:这个问题与.prop()和之间的区别无关.attr().我已经深入研究了StackOverflow上的这些问题,包括下面链接的问题(stackoverflow.com/questions/5874652/prop-vs-attr).从我的问题来看,很明显我完全理解两者之间的差异,可能比大多数人更好.我的问题是在任何情况下我必须使用.attr(),这是一个完全不同的问题,来自.prop()vs .attr().

javascript jquery attributes prop attr

5
推荐指数
1
解决办法
137
查看次数

选择表中的所有内容...使用where语句

我有一个有趣的情况,我正在尝试选择sql server表中的所有内容,但我只需要通过旧的公司API而不是SQL来访问该表.此API要求提供表名,字段名和值.然后以这种方式插入它相当简单:

select * from [TABLE_NAME_VAR] where [FIELD_NAME_VAR] = 'VALUE_VAR';
Run Code Online (Sandbox Code Playgroud)

我无法将=符号更改为!=或其他任何内容,只有那些变量.我知道这听起来很糟糕,但是我不能在不经过大量工作的情况下更改API,而且我只需要处理它.

此表中有多个列都是数字,所有字符串,并设置为非null.是否有值我可以通过此API函数返回表中的所有内容?也许是一个常数或特殊值,这意味着它是一个数字,它不是数字,它是一个字符串,*,它不是空的等等?有任何想法吗?

sql t-sql sql-server sql-server-2008

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

查找我的内容中是否包含搜索词数组的最快方法?

我正在尝试创建一个搜索框,当用户键入他们的搜索词时,它会不断评估这些搜索词是否在我的内容中。

我有一系列搜索字词和短语,例如:

["home", "and", "garden", "weeding a flower patch", "best tools"]
Run Code Online (Sandbox Code Playgroud)

我还有一个字符串,其中包含我要搜索的内容,例如:

"Using your hands to dig your flower holes brings you closer to the earth."
Run Code Online (Sandbox Code Playgroud)

在Javascript中,我需要查看该字符串的任何部分中是否有任何搜索词。我不需要知道哪些术语匹配或在何处匹配,只有该字符串中的某处至少是我的一个搜索术语的一个实例。这很重要,尽管它也可以在内容字符串中找到部分匹配项。例如,在上面的示例中,它应该返回true,因为单词“ hands”包含我搜索词中的单词“ and”。同样重要的是,以最快,最少计算量的方式完成此操作,因为我将连续数千次调用此函数。我怎样才能最好地做到这一点?

javascript arrays search parsing full-text-search

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

将变量附加到HTML元素?

我发现很多情况下我想将变量附加到div或其他HTML元素.例如,我有一个div,我正在使用它作为一个对话框窗口来编辑表中的一行 - 如下所示:

    <div class='dialog' id='editTableLineDialog'/>
Run Code Online (Sandbox Code Playgroud)

打开此对话框时,我需要在我正在编辑的表中记录该行的ID.在过去,我创建了名为lineCurrentlyEditting(Yuck!)的全局变量,或者我将id嵌入到实际的表id中,如下所示:

    <div class='dialog' id='editTableLineDialog_43'/>
Run Code Online (Sandbox Code Playgroud)

这两种解决方案都不是很优雅.我希望能够将变量添加到div中,如下所示:

    var dialog = document.getElementById('editTableLineDialog');
    dialog.tableLineId = 43;
Run Code Online (Sandbox Code Playgroud)

要么

    $('#editTableLineDialog').tableLineId = 43;
Run Code Online (Sandbox Code Playgroud)

要么

    <div meta='{tableLineId=43}' class='dialog' id='editTableLineDialog'/>
Run Code Online (Sandbox Code Playgroud)

反正有没有做过这样的事情?处理这种情况的最佳方法是什么?JQuery有解决方案吗?

html javascript jquery html5

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

`use std::io::Result as IOResult;` 比 `use std::io;` 仅仅引用 Rust 中的 `io::Result` 更高效吗?

在学习 Rust 的过程中,我看到了人们导入库(例如 )的多种方式std::io::Result,例如:

use std::io::Result as IOResult;
Run Code Online (Sandbox Code Playgroud)

pub type IOResult<T> = std::io::Result<T>;
Run Code Online (Sandbox Code Playgroud)

然而,我见过最多的一个,文档似乎建议的是导入所有结果std::io,然后在代码中引用 Result io::Result,如下所示:

use std::io;
fn main() -> io::Result<()> {}
Run Code Online (Sandbox Code Playgroud)

这对我很有吸引力,因为它看起来更直观。但是,我不确定 Rust 如何在幕后处理导入。我担心通过使用所有 std:io,我导入的内容会超出我的需要,并且可能会降低我的代码效率、增大尺寸、增加编译时间等。Rust 是否会为您优化此代码?所有这些语句在 Rust 中都是等价的还是最后一种方法效率不高?

import performance compiler-optimization rust

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