小编Tom*_*rdt的帖子

在JavaScript中构建类的正确方法?

我是JavaScript的新手,并试图理解我应该如何编写类(我的背景是'常规'OO语言,例如java和c ++).

我知道我有两个选择:

  1. 如果我希望我的类有私有方法和成员,我无法在原型中定义它们.但在这种情况下,它们将为每个创建的新对象(内存问题)构建.

  2. 如果我在类原型中定义方法,我将没有封装(这对我来说很奇怪,作为java/c ++开发人员:P).

您使用哪两种方法?为什么?

javascript prototype-programming

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

基于原型继承的应用程序在现实生活中的应用

基于类的继承显示了它在创建大型编程系统(尤其是GUI系统)时的实用性.

如何在现实生活中应用基于原型的继承?我们应该如何构建系统而不是创建类层次结构?

这里是否存在基于类的OOP存在的基于真实原型的OOP的编程模式?

javascript inheritance design-patterns prototypal-inheritance prototype-programming

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

OOP Javascript - 隔离类中的对象

我正在尝试创建一个主对象,我可以创建多个实例,每个实例都继承子项(具有唯一/隔离属性).但是,当我这样做时,对象的属性(在被更改之后)正在改变所有创建的对象.我可能没有正确解释这个,但这个例子应该很清楚.

Main = function(){};

// Extending the main class with new object. Doing it this way so I can have these in
// separate files.
Main.prototype.foo = {
    bar: 1
}

// First instance of Main().
var A = new Main();

// Second instance of Main().
var B = new Main();

// Set the bar property to different values for each Main() object.
A.foo.bar = 2;
B.foo.bar = 3;

// Both A.foo.bar and B.foo.bar return 3.
alert(A.foo.bar);
alert(B.foo.bar);
Run Code Online (Sandbox Code Playgroud)

我想要发生的是A.foo.bar返回2和B.foo.bar返回3,这样我就有了彼此独立的孤立对象.

有任何想法吗?我只是错过了一些明显的东西吗?非常感谢!

javascript prototype-programming

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

迷惑javascript的构造函数和原型?

function MyObject(){}
Array.prototype={};
MyObject.prototype={};
var a=new Array();
var b=new MyObject();
alert(a.constructor==Array);//true
alert(b.constructor==MyObject);//false
Run Code Online (Sandbox Code Playgroud)

javascript constructor prototype-programming

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

sqlite全文通配符搜索

Sqlite FT3 或 FT4 可以做类似的事情吗

SELECT * FROM MyTable WHERE body MATCH '*qlite'
Run Code Online (Sandbox Code Playgroud)

我知道这个:

SELECT * FROM MyTable WHERE body MATCH 'Sqlite*'
Run Code Online (Sandbox Code Playgroud)

工作,但似乎'%like'操作在全文中不起作用。

sqlite

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

Javascript:onScroll事件(使用Prototype)在IE上不起作用?

我试图使用原型以这种方式触发onScroll事件:

Event.observe(document, 'scroll', function(){
    alert('boo');
});
Run Code Online (Sandbox Code Playgroud)

它在Firefox上完美运行,但在IE上没有任何反应.有谁知道为什么?如果有另一种方法可以这样做?

谢谢

javascript prototypejs

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

在JavaScript中访问__defineGetter __/__ defineSetter__隐藏的属性

我正在尝试为该innerHTML属性定义自定义setter .不幸的是,我在定义setter函数后无法访问底层属性:

$('body')[0].__defineSetter__("innerHTML",
  function (val) {
    alert("Setting to: " + val);
    this.innerHTML = val;
});
Run Code Online (Sandbox Code Playgroud)

此片段填充调用堆栈,因为赋值以递归方式调用setter.Apparenly innerHTML已经是IE8中的重载属性,你可以简单地保存旧的get/set对并在新的属性描述符中使用它.摘自MSDN:

var innerHTMLdescriptor = Object.getOwnPropertyDescriptor(Element.prototype, 'innerHTML');
Object.defineProperty(Element.prototype, 'innerHTML',
  { set: function(htmlVal) {
      var safeHTML = toStaticHTML(htmlVal);
      innerHTMLdescriptor.set.call(this, safeHTML);
    }
});
Run Code Online (Sandbox Code Playgroud)

但是,Chrome的情况似乎并非如此,其中getOwnPropertyDescriptor返回未定义innerHTML.在这种情况下,我如何访问底层属性?

奖金问题:我如何确保将来创建的所有对象都有这种特殊innerHTML行为?是否可以使用DOM原型?似乎重载函数不是我需要的.也许有可能重载DOM构造函数并添加一个调用,__defineGetter__/defineProperty但看起来对构造函数的支持并不常见,所以我想知道是否有任何替代方法.

javascript dom innerhtml prototypejs getter-setter

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

将创建多少内部函数的副本

这些天我的大部分工作都与js开发有关.

但是我突然发现我对一些问题感到困惑.

检查此代码(我向自定义类添加一个方法):

MyCustomClass.prototype.fun=function(xx){
  this.options={.....}
  function innerFun01(){}
  function innerFun02(){}
}
Run Code Online (Sandbox Code Playgroud)

现在,使用它.

var mcc=new MyCustomClass();
mcc.fun(xxxx);

var mcc2=new MyCustomClass();
mcc2.fun(xxxx);
Run Code Online (Sandbox Code Playgroud)

现在,我想知道在内存中会创建多少个"innerFun01"和"innerFun02"函数的副本?

我真的很困惑.

javascript prototype-programming

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

旧对象作为原型

我正在读本书,有一章关于原型,有这个难以理解的段落和代码片段.

创建新对象时,可以选择应该是其原型的对象.JavaScript提供的机制是混乱和复杂的,但它可以大大简化.我们将向Object函数添加一个beget方法.beget方法创建一个使用旧对象作为其原型的新对象.

if (typeof Object.beget !== 'function') {
     Object.beget = function (o) {
         var F = function () {};
         F.prototype = o;
         return new F();
     };
}
var another_stooge = Object.beget(stooge);
Run Code Online (Sandbox Code Playgroud)

你能解释一下这段代码,为什么这么好?等等?您会建议哪种资源来研究原型?这是非常困难的.

javascript prototype-programming

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

在服务器套接字上获取随机10060(连接超时)错误

我的软件的一些用户最近来找我,告诉我它在Windows 8上不起作用.经过调查后发现,由于一些奇怪的原因,我的服务器套接字并不总是接受连接,但让它们超时.

更奇怪的是:连接到localhost时也会发生这种情况,而不仅仅是在远程访问时.

"你试过什么?"

  • 显而易见的事情:关闭防火墙(没有效果),看看其他软件是否正常工作(确实如此),尝试修改随机代码行(没有效果).
  • 不太明显的东西:使用全局WSAStartup而不是每个客户端或服务器实例一个(没有效果).

提醒:完全相同的代码在Windows XP和Windows 7上运行正常,它也会影响localhost连接(不是硬件问题).此外,只有三分之一的连接失败,其余的工作正常.

好的,现在是一些真正的代码,因为它比所有这些单词更有用.

套接字设置:

int iResult;

struct addrinfo *result = NULL;
struct addrinfo hints;

ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;

// "Resolve" our localhost
iResult = getaddrinfo(NULL, port, &hints, &result);
if (iResult != 0) {
    printf("error (2) : %d\n", iResult);
    return false;
}

// Create the socket
listenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
if (listenSocket == INVALID_SOCKET) {
    freeaddrinfo(result);
    printf("error (3) : %d\n", WSAGetLastError());
    return false; …
Run Code Online (Sandbox Code Playgroud)

c++ sockets windows-8

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