jjzjj

Prototype

全部标签

javascript - instanceof 运算符在继承链的后续更改时返回 false

当在构造函数上设置原型(prototype)时,instanceof运算符仅返回true,直到原型(prototype)被更改。为什么?functionSomeConstructorFunction(){}functionextendAndInstantiate(constructorFn){constructorFn.prototype={};//CanbeanyprototypereturnnewconstructorFn();}varchild1=extendAndInstantiate(SomeConstructorFunction);console.log(child1ins

javascript - JS 原型(prototype)继承 : childs use the same parent properties?

假设我有Player对象:varplayer=function(name){this.handlers={};}player.prototype.on=function(event,callback){if(!this.handlers[event]){this.handlers[event]=[];}this.handlers[event].push(callback);}效果很好,我可以创建播放器,每个播放器都有自己的一组处理程序。现在假设我需要从player继承:vartestPlayer=function(name){this.name=name;};testPlayer.pr

javascript - 明确的 ".prototype"真的需要吗?

我经常在别人的脚本中看到这样的东西:bar=Array.prototype.slice.call(whatever,1)但是,以下较短的符号也可以正常工作:bar=[].slice.call(whatever,1)这两个结构是否完全等价?是否存在以不同方式对待它们的引擎(浏览器)? 最佳答案 是的,完全等同。碰巧通​​过.prototype的访问稍微快一些,因为不需要创建新的对象实例。然而,这就是我们所说的微优化。完全摆脱深度链接的一个好方法是调用Function.prototype.bind。例子(function(slice){

javascript - 为什么在扩展对象时使用 Object.create 作为原型(prototype)?

我有Java背景,最近一直在尝试JavaScript继承。我开始编写一些对象,在阅读了一些示例后,我找到了最适合我的代码风格。这是我的:varClass=function(){};Class.extend=function(p_constructor){varSuperclass=this;//thefollowinglineconfusesmep_constructor.prototype=Object.create(Superclass.prototype);p_constructor.prototype.constructor=p_constructor;p_constructo

javascript - 原型(prototype)方法上的 JS Array.prototype.filter

有没有更简单的方法在没有匿名函数的原型(prototype)方法上调用过滤器?我想知道是否有与myArray.filter(function(it){it.method()})等价的东西。这看起来很接近于可能有效的方法(实际上无效):functionX(){}X.prototype.method=function(){console.log(this);}[newX(),newX()].filter(X.prototype.method.call);相反,我在最新的Firefox和Chrome中都遇到了TypeError,这是因为它没有完全按照我的要求进行:x=function(){c

javascript - 如何在 Screeps 对象中实现继承?

我已经研究Screeps一段时间了,昨晚我决定通过从Creep主类派生两个类Miner和Transporter,将我的一些行为纳入类层次结构。但是,每当我做console.log(_.functions(minerInstance));我得到的函数列表和我做的时候完全一样console.log(_.functions(transporterInstance));有人可以告诉我我是否做错了什么,或者我是否真的遇到了我的代码运行环境的限制?这是我的代码://////////////////////////////Creep.jsvarCreep=function(creep,room){t

javascript - `util.inherits` 和扩展 NodeJS 原型(prototype)的区别

我从0.11/0.12开始就一直在使用Node,所以如果这是一个来晚了的问题,请纠正我。我试图理解使用util.inherits(Son,Dad)和简单地扩展Son.prototype=[new]Dad()的原型(prototype)之间的区别.对于这个例子,我继承了一个Transformstream首先使用util.inherits:varutil=require('util')varTransform=require('stream').Transformutil.inherits(TStream,Transform)functionTStream(){Transform.call

javascript - 在其中一个原型(prototype)函数中调用 JavaScript 对象的构造函数是否正确?

我正在审查一位同事的JavaScript代码,他写了一个对象原型(prototype)函数,我认为它不符合面向对象编程的原则。Game.prototype.reset=function(){if(game.over){game.over=false;game=newGame(players);}}下面几行,游戏变量被声明为全局变量。vargame=newGame(players);那么,从其构造函数之一创建一个新的Game对象是否正确?代码完美运行。谢谢! 最佳答案 他不应该在原型(prototype)方法中引用变量game,因为g

Javascript:仍然对 instanceof 运算符感到困惑

这article定义instanceof如下:Theinstanceofoperatortestswhetheranobjecthasinitsprototypechaintheprototypepropertyofaconstructor.这是一个公平的解释,在我从EloquentJavascript书中看到这段代码之前,生活一直很美好:functionTextCell(text){this.text=text.split("\n");}TextCell.prototype.minWidth=function(){returnthis.text.reduce(function(wid

javascript - 没有原型(prototype)的原型(prototype)继承?

我想我了解JS中的原型(prototype)继承,但在编写代码来展示我的特定想法时遇到了困难。考虑这个极其简单的场景,其中Manager对象派生自Employee对象:functionEmployee(){this.name="Axel";this.dept="R&D";}functionManager(){Employee.call(this);this.reports=["Report1","Report2","Report3"];}console.log(newManager());输出是:Manager{name:"Axel",dept:"R&D",reports:Array[