我像这样调用下面的对象方法。
new Cout( elem1 ).load( 'body' )
new COut( elem1 ).display( 'email' )
我一次只使用一个实例。因为我一次只使用一个实例,所以我想删除this.element
并使用传入的element
代替。
这让我想知道传入的元素静态或基于实例。我认为它可能是this.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.
} );
};
};
答案 0 :(得分:3)
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
};
答案 1 :(得分:1)
当您使用this
时,它将成为您需要使用new
关键字进行实例化的类的成员,否则在没有创建实例的情况下无法使用this
一个班级。
您通过this
设置的任何内容都会成为实例成员,这意味着它会添加到您创建的实例的每个签名中。您可以使用prototype
属性来避免这种情况。
答案 2 :(得分:0)
如果你不使用this
并且只是在函数中引用element
,那么它将引用你在参数中传递的element
。
每次引用对象时都使用new
,但我认为这是错误的。每个实例都不知道你在this
上放置的先前属性,并且每次都必须传入相同的元素(这就是你正在做的事情,但如果你只是保存就没有必要第一次实例化时的对象。)
这就是new
的作用 - 为this
提供了一个干净的对象。
我认为你想要的是这样的:
var c = new Cout(some_element);
c.display();
如果您在构造函数中将元素保存为此属性,那么当您调用c.display()
时,它将能够正常访问this.element
。