原型的细节
Details on prototypes
我是从Python来的,试着去理解什么是原型。有什么方法可以让我得到一个原型的python描述吗?这听起来有点像一个描述符有了一个init的孩子。另外,我听说Prototype在DOM上使用时往往会产生负面影响。这是真的吗?如果是,为什么?谢谢,我已经看了大量的文章和原型只是没有意义,我在这一点上!
在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]]
(a.k.a __proto__
)属性中,因此它是可访问的。
现在的情况是,所有实例都有自己的状态,这是在构造函数中创建的(只是一个普通的函数),但它们共享添加到函数的prototype属性中的状态。这就是在Javascript中获得"类"的方式。
- 使用“;这个“;JavaScript原型方法中的关键字
- 引用类变量中的原型方法
- 如何从对象的原型方法访问JavaScript对象属性
- 为什么要包装每一个原型“;类“;JS中具有匿名函数的对象
- Node.js中的JavaScript原型对象效率
- 重载JS'firefox中的对象原型
- “util.inherits”和在NodeJS中扩展原型之间的区别
- 附加到原型属性的Do函数没有闭包
- 使用方括号访问插件原型函数
- 如何在master中调用细节网格作为单击事件
- 为什么JSON.stringify没有序列化原型值
- 为什么要返回'这'在导致循环的JavaScript原型中
- 带有对象/原型的链式承诺(Q延期)
- 如何覆盖原型中的事件侦听器
- 如何在Mocha/Chai中测试JS原型(非模块)
- 我将如何将Base的原型分配给User
- 原型和用法 Javascript
- 别名或以其他方式合并两个具有不同名称的相同对象原型
- JavaScript对象不是从原型链继承的
- 原型的细节