存储在proto和这个之间有什么区别
What is the difference between storing in proto and this?
我可能完全没有抓住要点,所以很抱歉。但我想知道在这种情况下使用"this"answers"prototype"有什么区别。我真正应该用什么来构建可重用的富类。。。
我有这个。。。
function MyClass() {
}
MyClass.prototype.name = null;
MyClass.prototype.init = function () {
console.log('init');
MyClass.prototype.name = 'Peter set by proto';
this.name = 'Peter set by this';
};
MyClass.prototype.SayName = function() {
console.log(MyClass.prototype.name);
console.log(this.name);
};
在页面上。。
<script type="text/javascript">
var myClass = new MyClass();
myClass.init();
myClass.SayName();
</script>
输出是…
init
Peter set by proto
Peter set by this
proto和this之间有什么区别?我认为它们基本上都访问对象/类。。。?
当您通过this
将任何方法或属性附加到类时,继承子类的所有实例中也将包含这些属性。另一方面,您使用prototype
仅向父类添加成员,但子类将继承它,从而节省内存。
function Func(name){
this.name = name;
this.display = function(){
alert(this.name);
}
}
在上面的情况下,继承Func
类的任何类的签名中也将有display
方法,如果您希望它在其他类之间共享,这是多余的。作为最佳实践,您应该只将那些子类不一定需要的成员(通过this
)添加到父类中。
如果您希望共享一个成员,而不是将其添加到子类的所有实例中,请使用prototype
:
function Func(name){
this.name = name;
}
Func.prototype.display = function(){
alert(this.name);
}
// child class calling display
function Child(name){
Func.call(this, name); // this refers to Child class here
}
Child.prototype = new Func();
var cls2 = new Child('Johnson');
cls2.display(); // Johnson
可以看出,display
方法来自父Func
类,在子类中可用。
Simplly put,prototype的属性将出现在类的所有对象中,而对象的属性恰好属于该对象。
您设置:
MyClass.prototype.name = 'Peter set by prototype';
和你控制台。log:
console.log(new MyClass().name);
console.log(new MyClass().name);
....
他们都会展示"彼得的原型"。
如果你设置:
var myClass = new MyClass();
myClass.name = "Peter set by object";
和你控制台。log:
console.log(new MyClass().name);
console.log(myClass.name);
....
将显示:
Peter由原型设定
对象设置的Peter
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- 什么是&&在没有if的行中的变量之间
- DOM元素和angular元素之间的主要区别是什么
- 什么's本地node.js服务器和python简单http服务器之间的区别
- JSDoc:模块和名称空间之间的关系是什么
- 什么'$.get和$.ajax之间的区别是什么
- Math.min()和Math.max()之间有什么区别?在Javascript中
- 什么'在Express中路由时,应用程序级中间件和路由器级中间件之间的区别是什么
- webpack开发模式和生产构建模式之间有什么区别
- 关于承诺/A+规范,术语“当时可”和“承诺”之间有什么区别
- 什么's extjs中的mon()和on()之间的区别
- XMLHttpRequest对象的open()和send()方法之间有什么区别
- 在使用JS的Ajax调用中,ajaxComplete和beforesend之间有什么区别
- 什么's使用链接和脚本标记引用JavaScript源之间的区别
- 什么's使用脚本标记调用文件和ajax之间的区别
- $(e.target).find和template.find('input').value之间有什么区别
- 什么'“dest”和“dist”之间的区别是什么
- 使用Javascript,获取元素的方法是什么,基于打开和关闭标记之间的文本
- 在测试间谍的上下文中,存根和mock之间有什么区别?(茉莉花)
- webpack中的源映射之间有什么区别