为什么这不起作用?
function displayValue(a,b){
this.a = a;
this.b = b;
$('p').text(a + " " + b);
}
var display = new displayValue();
display('1','2');
为什么即使没有'new'关键字也能正常工作?
function displayValue(a,b){
this.a = a;
this.b = b;
$('p').text(a + " " + b);
}
var display = displayValue('1','one');
使用new关键字,我创建了一个对象吗?如何更改displayValue的属性?
答案 0 :(得分:2)
为什么即使没有'new'关键字也能正常工作?
您的第一个示例 不起作用。您会在段落元素中获得"undefined undefined"
,并在调用display
时在控制台中显示错误,因为display
不是函数。
如果使用new关键字,我是否创建了[sic]对象?
是。 new
运算符创建一个新对象,然后调用构造函数,以便函数中的this
是对新对象的引用。
在第二种情况下,如果您不使用new
,则在displayValue
this
的调用中实际上是对window
对象的引用,即浏览器中的全局对象。 (如果您使用的是JavaScript的新“严格”模式,this
将为undefined
并且您在执行this.a = a;
时会出错。)
如何更改displayValue的属性?
我害怕我不明白这个问题。如果您的目标是使用构造函数返回具有a
和b
属性的对象,然后您可以使用这些属性更新段落的文本,则它可能看起来像这样:
// Defining it
function DisplayValue(a, b) {
this.a = a;
this.b = b;
}
DisplayValue.prototype.display = function() {
$("p").text(this.a + " " + this.b);
};
// Using it
var d = new DisplayValue(1, 2);
d.display(); // Changes all paragraphs to "1 2"
d.a = "A";
d.b = "B";
d.display(); // Changes all paragraphs to "A B"
答案 1 :(得分:0)
函数有两个不同的角色:
1-它们作为您在第二个区块中使用它的功能。 2-它们可以用作制作对象的类,就像你在第一个块中使用它一样。
相同的功能将作为不同的手段,例如:
var display = new displayValue();
表示您要根据类(函数)创建对象,因为您使用了new
关键字,而display
的结果var display = new displayValue();
不是函数它是一个javascript对象,您可以获得这样的道具:display.a
或display.b
。但是当它用作以下方法时:
displayValue('1','one');
这样,它只是一个被调用的函数,这里最重要的一点是this
在这个函数中指向函数的容器对象,它主要是你的顶级类或window
宾语。
在你的功能:
function displayValue(a,b){
this.a = a;
this.b = b;
$('p')。text(a +“”+ b);
}
当你执行this.a = a;
时,大多数情况下它意味着你想将它用作类或顶层类中的方法,例如:
function Display(){
this.displayValue=function displayValue(a,b){
this.a = a;
this.b = b;
$('p').text(a + " " + b);
}
}
或
function Display(){
//the constructor
}
Display.prototype.displayValue = function displayValue(a,b){
this.a = a;
this.b = b;
$('p').text(a + " " + b);
};
在此示例中,如果您尝试var obj = new Display();
,this
函数中的displayValue
关键字将指向Display
的当前实例obj
。< / p>