我在类中有以下功能:
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中模拟类的正确方法是在函数外添加方法,这将是你的类,如下所示:
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) 回到我开始使用数据库设计时,出于某种原因,建议您始终对表格和列使用snake case(my_table_name).我认为在MySQL中尤其如此.理由是存在资本化将丢失或执行的情况.快进到今天,我看到很多人使用Pascal Case("MyTableName"),我更喜欢.
有没有理由继续使用蛇形表格和列名?是否存在可能丢失或强制执行大写的情况(例如,如果更改数据库引擎,操作系统等)?
我无法解释这个.我有一个div,它是一个按钮.我使用:active psuedo类和position:relative; 单击时向下轻微移动它,给它一个动画.出于某种原因,Chrome中此按钮上有一个小的死区,位于文本和按钮边缘之间.psuedo类仍然会触发,但按钮上的Javascript却没有.如果我删除相对位置,问题就会消失.这也发生在Firefox中,但Firefox中的死区位于按钮移开的边缘,这是有道理的,但也需要修复.
我创建了一个JSFiddle来显示问题:http://jsfiddle.net/dillydadally/CUHA7/6/
知道为什么会这样吗?有办法解决吗?
我刚刚设置了Chrome工作区,但它正在做一些让我的工作流程感到不安的事情.如果我在源选项卡中编辑源文件,它将不会保存它,直到我告诉它 - 这是好的.但是如果我在元素选项卡中编辑样式,它会自动保存它,而不会告诉它.
我可以看到有些人会喜欢这个,但我喜欢尝试很多款式.如果我喜欢我的改变,我会保存它们.如果我不这样做,我就扔掉它们.实际上,它会在我执行更改时自动保存更改,因此我一直担心搞砸我的页面并丢失其原始状态.我不再自由地进行实验而不必担心丢失我的原始页面.
有没有办法配置Chrome,因此在我告诉他们保存之前,我在元素标签中所做的更改不会保存?或者也许有一个选项可以在加载网页时还原对其状态的更改?还有其他解决方案吗?你如何处理Chrome中的实验?
据我所知,.prop()函数可以执行.attr()函数可以执行的所有操作,但通常更安全,更简单.
例如:
$('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().
我有一个有趣的情况,我正在尝试选择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函数返回表中的所有内容?也许是一个常数或特殊值,这意味着它是一个数字,它不是数字,它是一个字符串,*,它不是空的等等?有任何想法吗?
我正在尝试创建一个搜索框,当用户键入他们的搜索词时,它会不断评估这些搜索词是否在我的内容中。
我有一系列搜索字词和短语,例如:
["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”。同样重要的是,以最快,最少计算量的方式完成此操作,因为我将连续数千次调用此函数。我怎样才能最好地做到这一点?
我发现很多情况下我想将变量附加到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有解决方案吗?
在学习 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 中都是等价的还是最后一种方法效率不高?
javascript ×6
jquery ×2
prototype ×2
this ×2
arrays ×1
attr ×1
attributes ×1
css ×1
css-position ×1
database ×1
html ×1
html5 ×1
import ×1
methods ×1
mysql ×1
onclick ×1
parsing ×1
performance ×1
position ×1
prop ×1
prototypejs ×1
rust ×1
search ×1
sql ×1
sql-server ×1
stylesheet ×1
t-sql ×1