gpt4 book ai didi

Javascript - 代码结构

转载 作者:行者123 更新时间:2023-12-02 17:55:14 25 4
gpt4 key购买 nike

假设存在:

Url = {}
Url.mk=function(u,n,v) { return {url:u, body:n+'='+v} }
Url.post=function(u) { /*does stuff*/ }

有时会使用它:

Url.post( Url.mk('xyz.com', 'a', 1) )

其他时候它的用法如下:

var u = Url.mk('xyz.com', 'a', 1);

是否可以创建一个 toString() 函数?所以你可以这样做:

console.log(  u.toString() ) //prints xyz.com?a=1

我在尝试创建这样的原型(prototype)时遇到了困难,因为(我猜)var u 只是一个对象文字,而不是使用 new 定义的对象。

有没有一种方法可以创建 toString() 函数而不需要创建对象实例?或者有更好的方法吗?

请注意,我希望能够在函数参数和var 作用域中使用任何方法

更新(得到答案后):

以下是真正的功能,以防有人感兴趣。我发现构建 url 可能很麻烦,而这些功能非常有帮助。这只是相关的功能,因为还有更多的功能可以进行表单序列化、表单发布等......

该函数解决的主要问题之一是始终添加我保存在 app.hv 中的 CSRF token 。

无论如何......已经晚了,现在就这样:

Url = {}
Url.objMk=function() {
var u = {
url: arguments[0],
body: 'ha=' + app.hv + '&cb_=' + parseInt(Math.random()*99999999),
ha: true,
toString: function () { return this.url + '?' + this.body;}
}
for(var i=1; i<arguments.length; i++)
if (i % 2 != 0) u.body=u.body+"&"+arguments[i] + "="+encodeURIComponent(arguments[i+1])
return u
}


Url.objReq=function() {
var u = {
url: arguments[0] + "?request=" + encodeURIComponent(arguments[1]),
body: 'ha=' + app.hv + '&cb_=' + parseInt(Math.random()*99999999),
ha: true,
toString: function () { return this.url + '&' + this.body; }
}

for(var i=2; i<arguments.length; i++)
if (i % 2 == 0) u.body = u.body+"&"+arguments[i]+ "="+encodeURIComponent(arguments[i+1])
return u
}


Url.obj=function() {
if (arguments.length % 2)
return Url.objMk.apply(this,arguments)
else
return Url.objReq.apply(this,arguments)
}

更新3

经过几个小时的 sleep ,我想出了一种让 Url.obj() 实际上返回一个对象的方法。不确定是否有人在读这篇文章......无论如何,这是新版本。

这非常酷,因为使用 Url.obj() 时永远不需要输入“new”

    Url.init = function(){
this.url = ''
this.body = ''
this.ha = true
this.nv = function (n,v) { this.body = this.body + '&' + n + '=' + encodeURIComponent(v) }
this.toString = function () { return this.url + ((this.url.indexOf('?') == -1) ? '?':'&') + this.body }
}

Url.objMk=function() {
var u = new Url.init()
u.url = arguments[0]
u.body = 'ha=' + app.hv + '&cb_=' + parseInt(Math.random()*99999999)

for(var i=1; i<arguments.length; i++) {
if (i % 2 != 0) u.nv(arguments[i], arguments[i+1])
}
return u
}

Url.objReq=function() {
var u = new Url.init();
u.url = arguments[0] + '?request=' + encodeURIComponent(arguments[1])
u.body = 'ha=' + app.hv + '&cb_=' + parseInt(Math.random()*99999999)

for(var i=2; i<arguments.length; i++) {
if (i % 2 == 0) u.nv(arguments[i], arguments[i+1])
}
return u
}

Url.obj=function() {
if (arguments.length % 2)
return Url.objMk.apply(this,arguments)
else
return Url.objReq.apply(this,arguments)
}

这使得可以通过 3 种不同的方式创建 URL:

    var a = Url.obj('a.com', 'a');
var b = Url.obj('b.com', 'b', 2);
var c = Url.obj('c.com', 'c', 3, 'c2', 4).toString()

var d = Url.obj('d.com')
d.nv('dd', 55)
d.nv('ee', 66)

console.log(a.toString())
console.log(b.toString())
console.log(c)
console.log(d.toString())

更新 4

现在使用 toString() 的原型(prototype)来节省内存使用(也用于练习)

    Url.init = function(p){
this.url = p /// Url.path(p) // write if needed
this.body = 'ha=' + app.hv + '&cb_=' + parseInt(Math.random()*99999999)
this.ha = true
}

Url.init.prototype.toString = function(){ return this.url + ((this.url.indexOf('?') == -1) ? '?':'&') + this.body }
Url.init.prototype.nv = function (n,v) { this.body = this.body + '&' + n + '=' + encodeURIComponent(v) }

Url.objMk=function() {
var u = new Url.init(arguments[0])
for(var i=1; i<arguments.length; i++) {
if (i % 2 != 0) u.nv(arguments[i], arguments[i+1])
}
return u
}

Url.objReq=function() {
var u = new Url.init(arguments[0] + '?request=' + encodeURIComponent(arguments[1]))
for(var i=2; i<arguments.length; i++) {
if (i % 2 == 0) u.nv(arguments[i], arguments[i+1])
}
return u
}

Url.obj=function() {
if (arguments.length % 2)
return Url.objMk.apply(this,arguments)
else
return Url.objReq.apply(this,arguments)
}

然后让使用变得轻而易举:

    function U(){
if (arguments.length % 2)
return Url.objMk.apply(this,arguments)
else
return Url.objReq.apply(this,arguments)
}

用法例如:

var x = U('abc.html', 'aa', 33, 'bb', 55)
console.log(x.toString())

var x = U('abc.html', 'aa', 33, 'bb', 55)

x.ajax( function(r){
//ajax callback (not shown in here)
})

最佳答案

Url.mk=function(u,n,v) { return {url:u, body:n+'='+v, toString: function () { return this.url + '?' + this.body; } }

应该可以正常工作

关于Javascript - 代码结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21013163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com