我正在尝试获取闭包保留的变量。我甚至不确定这是否可能。
下面是我的代码:
function MyBooks (author, title){
this.author = author;
this.title = title;
return function addPrice(amount){
return amount;
}
}
var MyBooksObj=MyBooks('Tolkin','Hobbit');
alert(MyBooksObj('100 dollars')); //outpot: 100 dollars
alert("author: " + MyBooksObj.author); //outpot: author: undefined
alert("title: " + MyBooksObj.title); //outpot: title: undefined有人知道如何使用变量'MyBooksObj‘从函数外部访问'author’和'title‘吗?
谢谢!
发布于 2018-01-19 06:18:07
在函数上使用new运算符可以创建一个与结果绑定了"this“的新对象。
function MyBooks (author, title){
this.author = author;
this.title = title;
this.addPrice= function (amount){
return amount;
}
}
var MyBooksObj= new MyBooks('Tolkin','Hobbit');
alert(MyBooksObj.addPrice('100 dollars')); //output: 100 dollars
alert("author: " + MyBooksObj.author); //output: auther: Tolkin
alert("title: " + MyBooksObj.title); //output: title: Hobbit
发布于 2018-01-19 06:57:44
您的代码中出现了一些错误和错误的假设。这就是我所感觉到的
所以为了纠正你的代码。我的建议是:
function MyBooks(author, title){
this.author = author;
this.title = title;
this.amount = 0;
this.addPrice = function(amount){
return this.amount += amount;
}
}
var MyBooksObj= new MyBooks('Tolkin','Hobbit');
alert(MyBooksObj); //ouput object
alert(MyBooksObj.addPrice(100)); //output: 100 dollars
alert(MyBooksObj.addPrice(100)) //output: 200 dollars
alert("author: " + MyBooksObj.author); //output: auther: Tolkin
alert("title: " + MyBooksObj.title); //output: title: Hobbit`发布于 2018-01-19 06:28:52
您还可以使用Class和构造函数:
class MyBooks {
constructor(author, title) {
this.author = author;
this.title = title;
}
setAmount(value) {
this.amount = value;
}
getAmount() {
return this.amount;
}
}
var MyBooksObj= new MyBooks('Tolkin','Hobbit');
MyBooksObj.setAmount('100 dollars');
alert(MyBooksObj.getAmount()); //outpout: 100 dollars
alert("author: " + MyBooksObj.author); //outpout: author: Tolkin
alert("title: " + MyBooksObj.title); //outpout: title: Hobbit
更多细节:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes
同样有趣的是:https://coryrylan.com/blog/javascript-es6-class-syntax
https://stackoverflow.com/questions/48331152
复制相似问题