我想知道创建一个拥有属性和方法的JavaScript对象的最佳方式是什么。
我看过一些例子,其中的人使用了 var self = this
,然后在所有函数中使用 self.
确保作用域始终正确。
接着,我又看到有人使用 .prototype
添加属性,而其他人则在代码中直接添加属性。
能否给我一个适当的JavaScript对象示例,其中包含一些属性和方法?
我想知道创建一个拥有属性和方法的JavaScript对象的最佳方式是什么。
我看过一些例子,其中的人使用了 var self = this
,然后在所有函数中使用 self.
确保作用域始终正确。
接着,我又看到有人使用 .prototype
添加属性,而其他人则在代码中直接添加属性。
能否给我一个适当的JavaScript对象示例,其中包含一些属性和方法?
我想提醒大家,我们可以使用标题或字符串来声明一个对象。
对于每种类型的调用方式不同。请参见以下内容:
var test = {
useTitle : "Here we use 'a Title' to declare an Object",
'useString': "Here we use 'a String' to declare an Object",
onTitle : function() {
return this.useTitle;
},
onString : function(type) {
return this[type];
}
}
console.log(test.onTitle());
console.log(test.onString('useString'));
Object.defineProperty()
方法直接在对象上定义一个新属性或修改对象上的现有属性,并返回该对象。 来源:Mozilla
var Foo = (function () {
function Foo() {
this._bar = false;
}
Object.defineProperty(Foo.prototype, "bar", {
get: function () {
return this._bar;
},
set: function (theBar) {
this._bar = theBar;
},
enumerable: true,
configurable: true
});
Foo.prototype.toTest = function () {
alert("my value is " + this.bar);
};
return Foo;
}());
// test instance
var test = new Foo();
test.bar = true;
test.toTest();
要查看桌面和移动设备的兼容性列表,请参见Mozilla浏览器兼容性列表。是的,IE9+也支持它,以及Safari移动版。
var Person = function (lastname, age, job){
this.name = name;
this.age = age;
this.job = job;
this.changeName = function(name){
this.lastname = name;
}
}
var myWorker = new Person('Adeola', 23, 'Web Developer');
myWorker.changeName('Timmy');
console.log("New Worker" + myWorker.lastname);
你也可以尝试这个
function Person(obj) {
'use strict';
if (typeof obj === "undefined") {
this.name = "Bob";
this.age = 32;
this.company = "Facebook";
} else {
this.name = obj.name;
this.age = obj.age;
this.company = obj.company;
}
}
Person.prototype.print = function () {
'use strict';
console.log("Name: " + this.name + " Age : " + this.age + " Company : " + this.company);
};
var p1 = new Person({name: "Alex", age: 23, company: "Google"});
p1.print();
//Constructor Pattern
function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.doSomething = function(){
alert('I am Happy');
}
}
var person1 = new Person('Arv', 30, 'Software');
person1.name //Arv
参考资料:Web开发专业JavaScript - Nik Z
class
的概念,就像你在标题中使用function
关键字所提到的那样。它不是一种设计模式,而是语言的一个有意的特性。我没有在这个问题上给你投反对票,但看起来有人因为回答过于简洁和几乎与问题无关而投了反对票。希望这个反馈能够帮到你。 - Cody
window
属性如document
或frames
更具保留意义;你肯定可以将其作为变量名重新使用该标识符。尽管如此,从风格上讲,我更喜欢使用var that= this
以避免任何可能的混淆。尽管window.self
最终是毫无意义的,所以很少有理由去碰它。 - bobincethis
赋值给一个本地变量(例如self
)可以减小文件大小。 - Patrick Fisher