这可能是一个非常容易的问题。我仍在学习javascript,希望我能为下面的问题寻求帮助。
var hello = function()
{
this.hey = function()
{
console.log("hey");
}
function init()
{
this.hey();
}
init();
}
var h = new hello();
上面的代码抱怨没有定义hey的方法。 但是如果我做的话
var h = hello();
它没有提出任何问题。
为什么第一个用new创建一个对象给了我错误但第二个没有?我需要创建对象,因此我需要使用new关键字。如何解决第一个错误?
答案 0 :(得分:1)
当您使用hello
调用new
方法时,它会创建hello
function/class
的新实例,您将获得this
作为上下文hello function
。
var hello = function () {
// this is an instance of hello class
this.hey = function () {
console.log("hey");
}
var _this = this; // creating this context of hello
function init() {
// this is a context of window here
//this.hey(); // throws an error
_this.hey(); // will execute
}
init();
}
var h = new hello(); // create a new instance/object of hello
然而,当您只是将其称为函数hello()
时,您将在window
内获得hello function
个上下文。
var hello = function () {
// this is a context of window here
this.hey = function () {
console.log("hey");
}
function init() {
// this is a context of window here
this.hey(); // will execute
}
init();
}
var h = hello(); // calling a hello function
JSFIDDLE DEMO:http://jsfiddle.net/8QN7W/