Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将函数应用于变量?JavaScript/jQuery_Javascript_Jquery - Fatal编程技术网

将函数应用于变量?JavaScript/jQuery

将函数应用于变量?JavaScript/jQuery,javascript,jquery,Javascript,Jquery,比如说 var contents = 'some text'; function fileSave(path){ // I'll handle saving the file, but I need the file contents } contents.fileSave('index.html'); 因此,当函数对contents变量很有趣时,函数就可以访问该变量。比如replace()在JavaScript中的工作方式 前 但在这种情况下 contents.fileSave();

比如说

var contents = 'some text';

function fileSave(path){
// I'll handle saving the file, but I need the file contents
}

contents.fileSave('index.html');
因此,当函数对contents变量很有趣时,函数就可以访问该变量。比如replace()在JavaScript中的工作方式

但在这种情况下

contents.fileSave();
变量是可互换的,该函数也适用于附加的任何变量


抱歉,新手..

如果要向所有字符串添加方法,请将其添加到
String.prototype

String.prototype.fileSave = function(path) {
    var str = this + "";
    // work with the string
    console.log(str, path);
};
只要注意你的环境。扩展本机原型可能与其他代码冲突。你需要自己决定这是否是个问题

var contents = 'some text';

contents.fileSave('index.html'); // some text index.html

这可能是一种更好的方法,无需修改
String.prototype

function fileEditor(path) {
    this.save = function(data) {
       // do something with path & data
    }
}
用法是

var someFile = new fileEditor("index.html");
someFile.save("some text");

此代码将函数newMethod附加到所有字符串实例,您也可以对其他类型执行此操作

newMethod = function (signature) {...}
String.prototype.newMethod = newMethod
'a'.newMethod()

正如其他人所指出的,这可能不是最好的方法,但我仍然认为了解javascript的工作原理对您来说可能很有趣(至少要开始使用javascript的原型)。

不要编辑您不拥有的对象的原型! 解决方案1:使用构造函数,创建一个新对象作为丢失的源代码 解决方案2:通过对象文字声明对象:

var content={
    text:"loremipsum",
    save:function(){ // do work here }
}

并通过content.save()保存

向基类添加方法不是一个好的实践。将函数的签名修改为
fileSave(contents,path)
怎么样?您正在寻找的是所谓的OOP,您可以在js中执行,但在继续修改原型定义之前,您需要深入理解这个概念,如下面的答案所示,以便在我看来有效地使用它。我建议阅读:@zerkms:既不好也不坏。这只是另一个工具,适用于某些情况,而不适用于其他情况。我知道,害怕自己阴影的开发人员开始投票只是时间问题。我的回答是警告,它可能与其他代码冲突,但只要您得到通知,这并不是一个坏的做法。Noobs有时害怕它,但它可能非常有用。工具就是工具。它们是用来使用的。没有一种工具适合于任何情况,但它们都不应该被丢弃。我觉得修改
字符串
数字
的原型不是问题<另一方面,代码>数组
对象
在循环中具有更为显著的效果(可能更多我没有意识到)。因此,对我来说,修改
字符串
数字
的原型除了它们可能重写或被执行相同操作的其他代码重写之外,没有其他效果。那么,“与其他代码冲突”是什么意思?或者这就是你的意思?为什么要这样做:
var str=this+“”?我觉得有趣的是,大多数人只是遵循这个规则,不修改原型,因为他们听过一次,但实际上并不理解why@Ian:是的,没错。冲突主要是其他代码出于不同目的在同一原型上使用相同属性的问题。当然,
Object.prototype
有一些问题需要开发人员更加关注。我并不介意数组。prototype,但我知道在某些情况下它是不明智的。我这样做的原因是,如果您的代码不是在“严格模式”下运行,JavaScript会将原始字符串转换为其
字符串
对象包装器,这可能会在代码中导致意外结果。这会将其转换回原始版本。非常酷,感谢所有这些信息。我不确定是否有超越/被超越以外的原因,所以这是有意义的。我不知道如何使用
+“
”,所以这是另一件好事。“永远不要编辑你不拥有的对象的原型!”永远不要使用宽泛的规则,就像它们适用于所有情况一样。不要传播FUD。永远不要不知道你可以使用的工具。不要把任何事情都算出来。。。这可能是针对特定案例的完美解决方案。
var content={
    text:"loremipsum",
    save:function(){ // do work here }
}