gpt4 book ai didi

javascript - 您可以在原型(prototype)函数中访问原型(prototype)属性吗?

转载 作者:行者123 更新时间:2023-11-28 12:29:03 24 4
gpt4 key购买 nike

如果我声明一个这样的类:

var Foo = function() {};

并向其添加属性,如下所示:

Foo.prototype.bar = "";

为什么我无法像这样访问该属性:

Foo.prototype.setBar = function( value ) {
this.bar = value;
}

在我的代码中,Foo.prototype.SetBar 范围内没有 Foo.prototype.bar。 this.bar 显示未定义。

更新

好吧,也许我应该更具体一点,因为由于某种原因我的代码没有运行。

var JSocketServer = function( options, callback ) {
if( typeof(options) != "object" ) {
callback("Invalid object passed for options");
return;
}
if( typeof(options.port) != "number" ) {
callback("Must specify a port number in options");
return;
}

// Hook up Event Emitter Functionality
mevents.EventEmitter.call(this);

this.initServer( options, callback );
};

// Set up static class properties
JSocketServer.prototype.socketPool = {};
JSocketServer.prototype.socketMap = {};

// Inherit from EventEmitter
mutil.inherits(JSocketServer, mevents.EventEmitter);


JSocketServer.prototype.initServer = function( options, callback ) {
// Hook up raw tcp server
var jserver = this;
var server = mnet.createServer( function( socket ) {
jserver.handleSocket( socket, callback );
});

server.listen(options.port, function() {
console.log("Socket Server is bound");
})

this.serverListener( server )
}

JSocketServer.prototype.handleSocket = function( socket, callback ) {
var jsocketServer = this;
var jsocket = new mjsocket(socket);

console.log("Socket: "+jsocket.socketID+" connected");

this.socketPool[jsocket.socketID] = jsocket;

jsocket.on("data", function( data ) {
// Add socket id to socket map
jsocketServer.socketMap[jsocket.moduleID] = jsocket.socketID;
});

jsocket.on("close", function(err) {
jsocketServer.removeSocket(jsocket.socketID);
});

// Callback with JSocket
callback( undefined, jsocket );
}

现在在 JSocketServer.prototype.handleSocket 中,我尝试将键和值分配给 this.socketPool,它说 this.socketPool 未定义。现在根据我的理解和你们所说的,这不应该是。

更新

这是我的代码的 JS Fiddle http://jsfiddle.net/bZrtn/ 。我有 2 个类 JSocketServer 和 JSocket,它们正在由底部的 APP 使用。

最佳答案

是的,您可以,但仅限于检索值时。设置该值将创建一个实例属性。如果您指定实例属性,则将返回该属性而不是原型(prototype)值。这意味着您可以:

Foo.prototype.radius = 5;
Foo.prototype.diameter = function() {
return this.radius * 2;
};

var circle = new Foo();
console.log(circle.diameter()); // prints 10
circle.radius = 10;
console.log(circle.diameter()); // prints 20 just for this instance

这是一个图表,说明了来自以下站点 http://docstore.mik.ua/orelly/webprog/jscript/ch08_04.htm 的基于圆圈的示例。

enter image description here

JSFiddle演示原始问题。

关于javascript - 您可以在原型(prototype)函数中访问原型(prototype)属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24249721/

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