网站搜索

JavaScript 原型继承与对象属性

我正在尝试将原型继承应用到 Javascript 中的一个函数。这一切都很简单,甚至在维基百科的 Javascript 条目中也有描述。如果我的属性是简单的 Javascript 类型,它是可以工作的:

function Person() { this.age = 0; this.location = { x: 0, y: 0, absolute: false }; }; function Employee() {}; Employee.prototype = new Person(); Empl

阅读更多 →

关于 JavaScript 值什么时候是按引用复制而不是按值复制,有什么经验法则吗?

即使作为一个有些经验的 JavaScript 开发者,我仍然经常对对象的浅拷贝与深拷贝感到惊讶。

对于主要的对象类型,什么时候 JavaScript 值是按引用复制而不是按值复制,有什么经验法则吗?例如,我知道字符串值总是按值而不是按引用复制。

答案#1

在 JavaScript 中,所有对象都是以“引用”的方式存储和传递的。

var a = { v: 'a' }, b = { v

阅读更多 →

我如何用 JavaScript 获取缩放后的 SVG 元素的宽度?

如果我有内联 SVG,包括一个已被缩放的元素...

<g transform="scale(sX,sY)"> <rect id="myElement" x="107" y="32" width="245" height="31" stroke="#C6C3C6" stroke-width="1px" /> </g>

... 或者位于具有 viewBox 属性的 <svg> 元素中:

阅读更多 →

将整数列表从 JavaScript 传递到 C#——我收到了列表,但它是空的;表单数据的结构不正确吗?

我的数组是这样填充的:

updateLabels: function () { var diagrams = _stage.diagramLayer.getChildren(); var componentIDs = new Array(); for (var index = 0; index < diagrams.length; index++) { componentIDs.push(diagrams[index].componentID)

阅读更多 →

面向对象编程 vs JavaScript

我有面向对象编程(OOP)的背景。我开始大量使用 JavaScript。随着项目的增长,维护它变得越来越困难。在 Java 中,我应用 OOP 原则来保持事务的可控性。我应该如何处理 JavaScript,我应该学习什么来保持 JavaScript 应用程序的可控性?

答案#1

你也可以将面向对象编程(OOP)原则应用于 Javascript 开发。Javascript 使用原型继承,但那只是实现细节。概念仍然是相同的。你熟悉的大多数概念在 Javascript 中都有直接对应的类比。

其他经过验证的方法也适用:

1) 保持 DRY -- 不要重复自己。重复的代码总是有害的。 2)

阅读更多 →

JavaScript:如果用户取消 confirm(),阻止文件输入点击时更改

在使用 confirm() 方法时,如何防止表单文件输入元素在 onclick DOM 事件中发生变化?

在示例中,我想给用户提供一个机会,通过询问他们是否希望确定|取消,从而不会丢失文件输入元素的值,如果他们点击取消,则不应显示文件对话框窗口。

XHTML

<input name="post_file" onclick="images_change();" type="file" value="" />

阅读更多 →

从 Javascript 对象中移除属性

如何从一个 Javascript 对象中移除所有属性?

例如;如果我有以下的 'class',我如何执行重置并移除它的所有属性:

function MyObject() { this.type="blah"; this.name="kkjkj"; } MyObject.prototype.clearAttribs = function() { // I want to remove name, type etc from 'this' // Maybe I can do the following? for (var key in this) delete this[key]; }

答案#1

你的代码看起来没问题。由于 delete 不会 删除原型上的属性,你甚至不需要使用 hasOwnProperty

阅读更多 →

html - script 标签之间的 JavaScript 函数作用域

我有两个不同的 JSP,由 Java 后端连接在一起并发送回同一个渲染的 HTML 页面。

每个 JSP 都有自己 `<script>` 块,并在该块内定义函数:

JSP #1:

<script type="text/javascript"> function blah() { ... } </script>

JSP #2

<script type="text/javascript"> function foo() { blah();

阅读更多 →

继承 - 在 Javascript 中,'Object.create' 和 'new' 的区别

我想我已经在脑海中理清了区别,但我只是想确认一下。

在道格拉斯·克罗克福德的页面《JavaScript中的原型继承》中,他说

在原型系统中,对象从对象继承。然而,JavaScript 缺少执行该操作的运算符。相反,它有一个 new 运算符,使得 new f() 产生一个继承自 f.prototype 的新对象。

我并不真正理解他在那句话中想表达的意思,所以我做了一些测试。在我看来,关键的区别是,如果我在一个纯原型系统中基于另一个对象创建一个对象,那么所有父级的成员应该在新对象的原型上,而不是在新对象本身

阅读更多 →

html - 将 JavaScript 制作的图像复制到剪贴板

现在有用 HTML5 在不使用浏览器插件(所以没有 Flash 或 Java)也不使用短期解决方法的情况下,将在画布中创建的图像复制到剪贴板的方法吗?

复制到剪贴板将由 JavaScript 发起,但需要用户确认或弹出对话框也不是问题。

在 Windows 和 Linux 上无效,或至少在 Chrome 和 Firefox 上无效的解决方案对我没有兴趣。

理想情况下,我更希望有一种解决方案,不需要强制显示图像(该图像是通过 document.createElement('canvas') 在内存中创建的),但这不是绝对要求。

答案#1

据我所知,剪贴板 API 是该领域中唯一的规范。我从未使用过它,也不知道它的支持程度有多广,但我怀疑不是很广。根据这个快速且简单的测试,当前版本的 Chrome 和 Firefox 会触发 copy 事件。我认为必须由用户发起复制操作(例如,你说“按 Ctrl+C 复制”)。

阅读更多 →