- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只是想通过尝试一些原型(prototype)来了解原型(prototype),但我不确定我是否做对了。在这个例子中,我希望原型(prototype)的新实例是用在原始函数之外定义的更改创建的:
function Peeps (){
this.x = "old"
};
Peeps.prototype.x = "new";
var peep1 = new Peeps();
peep1.x; //still "old"
delete peep1.x;
peep1.x; //now "new"
我知道在最后一行中,x 的新原型(prototype)值“闪现”,因为我删除了对象的 native x(它是“旧的”),所以它会在原型(prototype)链上向上寻找另一个 x。我想我的问题是:为什么 x 对于对象首先是“旧的”?即使原型(prototype)的属性之一之前已更改,代码是否没有超越新对象的原始 Peeps 原型(prototype)函数,但是当它在对象中找不到 native x 时,它会超越原始 Peeps 函数?
我已经通读了这里的其他主题,但我认为我还没有完全理解其中的原因。如果有人能用自己的话来解释,那就太好了。
最佳答案
why was x "old" in the first place for the object? Does the code not look past the original Peeps prototype function for the new object even though one of the prototype's properties got changed before, but when it can't find a native x in the object, it looks beyond the original Peeps function?
没错。原型(prototype)旨在提供与继承在其他语言中为我们提供的功能类似的功能。您可以使用 .prototype
来表达“大多数 Peeps
的行为方式”。但是由于您的“构造函数”函数(通过 new Peeps()
调用)在此特定实例中设置了一个属性,因此该属性将优先于原型(prototype)。
I have read through other topics on here, but I don't think I quite understand the reasoning yet. If someone could explain it in their own words, that would be great.
以下是 an article I wrote 的摘录,这可能会有所帮助:
JavaScript 使用一种特殊的prototype
属性来解决其他语言使用类来解决的问题。请考虑以下事项:
function Person(first, last)
{
this.first = first;
this.last = last;
}
var john = new Person("John", "Doe");
var mary = new Person("Mary", "Deer");
Person.prototype.full = function() {return this.first + " " + this.last;};
alert(john.full());
这里发生了很多事情。
函数
,它会在调用时为其this
对象设置属性。new
关键字来创建该函数的两个独立实例。这确保 john
和 mary
引用完全独立的对象,每个对象都有自己的 first
和 last
属性。Person
函数的prototype
属性的full
属性。 prototype
属性存在于所有函数中,并允许您定义应存在于从该函数创建的每个对象上的回退属性。john
的 full()
函数。 JavaScript 发现 john
对象实际上并没有 full
函数,所以它寻找 Person.prototype.full()
函数并调用它。然而,在那个调用中,this
仍然引用 john
对象。关于实例中未显示 Javascript 原型(prototype)更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31973587/
好吧,我怀疑这是一个独特的情况,所以要么有人这样做了,要么有人认为这是不可能的,至少以我所要求的方式。 我有 2 个原型(prototype)变量(函数),一个是父变量,另一个是助手。我想做的是从助手
这是 JavaScript 大师的问题。我正在尝试更优雅地使用 JavaScript 原型(prototype)模型。这是我的实用程序代码(它提供了真实的原型(prototype)链并正确使用 ins
我们知道在 JavaScript 中有一个用于数组的 .forEach() 方法。但是字符串没有内置该方法。 那么,下面的代码片段有没有问题:String.prototype.forEach = Ar
我们知道在 JavaScript 中有一个用于数组的 .forEach() 方法。但是字符串没有内置该方法。 那么,下面的代码片段有没有问题:String.prototype.forEach = Ar
我看到了两种不同的模式和解释。来自 DailyJS 和许多其他人的一篇:矩形.prototype = new Shape(); 然后是 Crockford 的 here 这意味着只是 矩形.proto
尝试在 Object.prototype 以及 String.prototype 和 Number.prototype 上定义一个 hashCode 方法>。我正在使用以下方法定义原型(prototy
在本教程中,您将借助示例了解 JavaScript 中的原型。 在学习原型之前,请务必查看以下教程: JavaScript 对象 JavaScript 构造函数 如您所知,您可以使用对象构造函
当构造新对象时,该对象被设置为委托(delegate)任何尚未显式设置为其构造函数原型(prototype)的属性。这意味着我们可以稍后更改原型(prototype),并且仍然可以看到实例中的更改。
我正在努力获得更好的 JavaScript 实用知识。所以,我买了 Douglas Crockford 的书“JavaScript the good parts”。 我现在很难掌握原型(prototy
我的理解是相同类型的所有对象将共享相同的原型(prototype)。因此对原型(prototype)的更改将反射(reflect)在每个对象上。但是值类型的属性似乎不是这样。这种属性是如何存储的? f
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicate: JavaScript: Class.method vs. Class.prototype.method 创建
为什么在 MDN 函数中 polyfills 使用“if (!Array.prototype.filter)”? if (!Array.prototype.filter) { Array.prot
这个问题已经有答案了: Assigning prototype methods *inside* the constructor function - why not? (6 个回答) 已关闭 7 年
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
面向对象有一个特征是继承,即重用某个已有类的代码,在其基础上建立新的类,而无需重新编写对应的属性和方法,继承之后拿来即用; 。 在其他的面向对象编程语言比如Java中,通常是指,子类继承父类的属性和
OOP 中原型(prototype)设计模式最重要的部分之一是我们不会从头开始创建新对象,我们只是使用 clone() 函数从现有对象克隆它们。 那么clone()函数是深拷贝还是浅拷贝? 如果它是一
在进行原型(prototype)设计时,您在多大程度上放弃了最佳实践来支持代码和修复黑客攻击?当然,代码并不打算在完整的生产环境中保留。 补充:我正在研究一个用 Python 制作的相当大的半工作原型
我开始学习设计模式。我知道原型(prototype)是用来制作我已经拥有的对象的精确副本,而享元是用来制作类似的对象。 我已经编写了 2D 平台游戏,例如马里奥(Java)。有很多相同的敌人,唯一的区
我正在使用 Maven 生成原型(prototype)。我能够使原型(prototype)生成正常,并且它生成的项目模板按预期工作。唯一的问题是在我的 shell 脚本中。脚本中注释掉的任何内容都会被
我想用 primefaces 配置一个 Java EE 项目。我在某处读到可以使用 mvn arechetype:generate 创建项目结构。当我使用它时,我只看到了 41 个选项,而在该教程中,
我是一名优秀的程序员,十分优秀!