这个论点和论点之间的区别
Difference betweent this.argument and argument?
我这样调用下面的对象方法。
new Cout( elem1 ).load( 'body' )
new COut( elem1 ).display( 'email' )
我一次只使用一个实例。由于我一次只使用一个实例,因此我想删除this.element
并使用传入的element
。
这让我想知道传入的元素是静态的还是基于实例的。 我认为可能是这个元素(基于实例)...即使我没有明确说明。 我计划删除所有提及 this.element 的元素。
是吗?
注意:如果没有给出其他返回,则隐式返回。
var COut = function ( element )
{
var messages =
{
name: 'Please enter a valid name',
email: 'Please enter a valid email',
email_s: 'Please enter a valid email.',
pass: 'Please enter password, 6-40 characters',
url: 'Please enter a valid url',
title: 'Please enter a valid title',
tweet: 'Please enter a valid tweet',
empty: 'Please complete all fields',
same: 'Please make emails equal',
taken: 'Sorry, that email is taken',
validate: 'Please contact <a class="d" href="mailto:fo@foo.com">support</a> to reset your password'
};
this.element = element;
this.display = function( type )
{
this.element.innerHTML = messages[ type ];
};
this.load = function( location )
{
new AjaxRequest().invoke( 'ajax_type=async_load', function( response_text )
{
document[location].innerHTML = response_text;
new Cin().init( response_text.charAt( 6 ) ); // Correlate this point to Ajax Call.
} );
};
};
element
也不是真的。它是构造函数的局部变量,每次调用都会定义。它只是 this
的属性,因为它已显式设置:
var COut = function ( element )
{
// ...
this.element = element;
// ...
};
尽管如此,使用它而不是this.element
应该可以很好地与构造函数中定义的任何函数/方法一起使用:
var COut = function ( element )
{
// ...
this.display = function( type )
{
element.innerHTML = messages[ type ];
};
// ...
};
无法访问它的地方是,如果您改用prototype
来定义构造函数之外的方法。在这里,element
不在范围内;但this
会是,所以this.element
也会是:
COut.prototype.display = function ( type ) {
this.element.innerHTML = messages[ type ];
element.innerHTML = messages[ type ]; // ERROR: `element` is not defined
};
当你使用this
它成为类的成员时,你需要使用new
关键字实例化,否则在不创建类实例的情况下使用this
是没有意义的。
此外,您通过this
设置的任何内容都将成为实例成员,这意味着它将被添加到您创建的实例的每个签名中。可以通过改用prototype
属性来避免这种情况。
如果您不使用this
而只是在函数中引用element
,那么它将引用您在参数中传递的element
。
每次引用对象时,您都在使用new
,但我认为这是错误的。每个实例都不知道您之前放在this
的属性,并且每次都必须传入相同的元素(这就是您正在做的事情,但如果您只是在第一次实例化对象时保存对象,则无需这样做)。
这就是new
所做的 - 给你一个干净的对象this
.
我认为你想要的是这样的东西:
var c = new Cout(some_element);
c.display();
如果在构造函数中将元素保存为 this 的属性,那么当您调用 c.display()
时,它将能够正常访问this.element
。
- 全局变量和全局对象的属性之间有什么区别吗
- JavaScript中的函数和对象之间没有区别吗?
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- javascript函数的:和=之间的区别
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 函数中this和var之间的区别
- “util.inherits”和在NodeJS中扩展原型之间的区别
- Math.min()和Math.max()之间有什么区别?在Javascript中
- webpack开发模式和生产构建模式之间有什么区别
- servlet和代理servlet之间的区别
- Javascript 类型未定义和 void 之间的区别
- Javascript-defineProperty和直接在对象上定义函数之间的区别
- 关于承诺/A+规范,术语“当时可”和“承诺”之间有什么区别
- 布局引擎和javascript引擎之间的区别
- 什么's extjs中的mon()和on()之间的区别
- type=text/javascript和language=javascript之间的区别
- 函数()和新函数()之间的区别
- JavaScript中let和var之间的区别
- 蓝鸟的done()和spread()之间的区别
- Node.js HTTP/NET——连接和请求之间的区别