所以我来自Python并试图围绕原型是什么。无论如何,我可以得到一个原型的Pythonic描述?这种听起来像一个描述符有一个婴儿init。另外,我听说Prototype在使用DOM时往往会产生负面影响。真的吗?如果是这样,为什么?谢谢,我一直在浏览大量的文章,而Prototype在这一点上对我来说毫无意义!关于原型的细节
关于原型的细节
回答
在Javascript中,很像Python,一切都是对象。这包括功能。
虽然Javascript没有类。但是,您可以使用函数来模拟类的行为。
所有功能都有一个名为prototype
的属性。 如果你说:
myInstance = new myFunction()
myFunction
运行。 (所以它就像一个构造函数)并且结果存储在myInstance
中。这里没什么疯狂的,但new
关键字所做的是将prototype
属性从myFunction
复制到myInstance
的内部属性。该文档在文档中被称为[[prototype]]
,您可以在一些现代浏览器中将其引用为__proto__
。 __proto__
虽然没有标准化,所以不鼓励使用它。
如果您需要获取物体的[[prototype]]
,而不是使用__proto__
,请使用Object.getProtoTypeOf(myInstance)
。
MyClass.prototype == Object.getPrototypeOf(myInstance) //true
当调用对象的方法,如果对象没有该方法,使用Javascript将查找其[[prototype]]
财产。它将继续搜索原型(又名继承)链,直到它达到Object
。
因此,作为一个例子:
function MyClass() {
this.prop ="hello"
//Javascript implicitly returns `this` when the function is invoked using "new"
}
MyClass.prototype.instanceMethodOne = function() {
console.log(this.prop);
}
var myInstance = new MyClass();
myInsance.instanceMethodOne(); //"hello"
在上述例子中,myInstance
将有一个称为prop
属性。但它不会有名为instanceMethodOne
的房产。此属性已添加到MyClass
的原型对象。但是,对该对象的引用被复制到myInstance
的[[prototype]]
(又名)__proto__
属性中,因此它是可访问的。
你现在有一种情况,所有的实例都有自己的状态,它是在构造函数中创建的(只是一个普通函数),但是它们共享添加到函数原型属性的状态。这就是你如何在Javascript中获得“类”。
将这些事情称为类并不好,称它们为_Constructors_ –
查看构造函数来解释JavaScript原型......也许不是最好的主意。 –
@Kyll什么是解释它们的更好方法?关于对象蓝图的一些过于复杂的隐喻? ;)请随时添加您自己的答案。我会高兴地投票。这只是我解释它的方式,它在技术上是准确的。 – LukeP
- 1. 关于JavaScript的原型关于JavaScript的原型
- 2. 关于JavaScript原型
- 3. 关于原型和原型js
- 4. 关于承诺的细节;示例
- 5. 关于JavaScript数组原型
- 6. @ Html.DisplayNameFor的细节模型
- 7. 关于原型的点击功能Javascript
- 8. 关于javascript的原型和参数
- 9. 关于javascript中原型的问题
- 10. 关于JSON的原型链是什么?
- 11. 关于JavaScript的原型和构造
- 12. Django的 - 查询集获得所有相关的细节模型
- 13. 反应原生动态ListView主细节
- 14. 反应原生Android设置细节
- 15. TClientDataset在主细节不关闭细节查询
- 16. UITableView的原型细胞错误EXC_i386_INVOP
- 17. 如何找出关于m3u8流的细节?
- 18. 关于主/细节流模板的两个问题
- 19. Tkinter的部件回拨,以确定细节关于此微
- 20. 解释一些关于字符串的细节
- 21. 关于mybatis的参数类型为原始数据类型?
- 22. 寻找page_stories_by_story_type的类型细节和page_consumptions_by_consumption_type
- 23. ScriptEngine.ExecuteFile的细节
- 24. MapView的细节
- 25. 相当于原型
- 26. 关联映射细节混淆?
- 27. 关于jQuery的活细小的问题()
- 28. 建议 - 如何模型细节列表
- 29. 在主细节关系中保留详细信息EF4 POCO
- 30. 关于'this'的混淆和JavaScript中的原型设计
我想_a原型的pythonic描述应该是['prototype.py'](https://github.com/airportyh/prototype.py),但是这是原型到_Python_的实现。 _古典语言_以与古典_Class_不同的方式进行代码重用,这不是一个简单的翻译。 –
@PaulS。谢谢,prototype.py的一个快速谷歌带我到一个非常有用的网站,它听起来像一个并不遥远。纠正我,如果我错了,但你可以定义变量和设置默认值(如init)。此外,您可以添加类似于部分的自定义函数或使用装饰器或覆盖内置函数(如print)(类似于描述符覆盖__getattr__的能力)? –
我也试图在这方面找到一些见解,并且偶然发现了这篇文章http://aaditmshah.github.io/why-prototypal-inheritance-matters/。希望能帮助到你。 – bbill