JavaScript中的面向对象(一)——创建自定义对象
2015-07-21 20:48
751 查看
面向对象的语言有一个标志,那就是它们都有“类”的概念,通过类可以创建任意多个具有相同属性和方法的对象。JavaScript 中没有类的概念,因此它的面向对象与基于类的语言中的对象有所不同。JavaScript 对对象的定义是:无序属性的集合,其属性可以包含基本值、对象或者函数。可以把 JavaScript 对象理解成散列表,即一组名值对,其中的值可以是数据或函数。那么想要创建自定义对象,有以下几种常用方法:1.使用 Object 构造函数:[code=js;toolbar:false">var person = new Object();
person.name = "Lucy";
person.age = 24;
person.job = "nurse";
person.sayName = function() {
console.log(this.name);
};function createPerson(name, age, job) {
var o = new Object();
o.name = name;
o.age= age;
o.job = job;
o.sayName = function() {
console.log(this.name);
};
return o;
}
var person1 = function("Lucy", 24, "nurse");
var person2 = function("Tom", 22, "engineer");person1.constructor === Person //true
person2.constructor === Person //truefunction Person(name, age, job) {
this.name = name;
this.age= age;
this.job = job;
this.sayName = new Function("console.log(this.name)");
}function Person() {
}
Person.prototype.name = "Lucy";
Person.prototype.age= 24;
Person.prototype.job = "nurse";
Person.prototype.sayName = function() {
console.log(this.name);
};
var person1 = new Person();
var person2 = new Person();
person1.sayName() //Lucy
person2.sayName() //LucyObject.getPrototypeOf(person1) === Person.prototype //true
Object.getPrototypeOf(person1).name //"Lucy"delete person1.name;
person1.name //Lucy (来自原型对象)person2.name; //Lucy (来自原型对象)
"name" in person2; //true
person2.hasOwnProperty("name"); //false
person2.name = "Jordan";
"name" in person2; //true
person2.hasOwnproperty("name"); //truefunction Person() {
}
Person.prototype = {
name: "Lucy",
age: 24,
job: "nurse",
sayName: function() {
console.log(this.name);
}
};Person.prototype = {
constructor: Person, //主动声明constructor
name: "Lucy",
age: 24,
job: "nurse",
sayName: function() {
console.log(this.name);
}
};function Person() {
}
var person1 = new Person();
Person.prototype = {
constructor: Person,
name: "Lucy",
age: 24,
job: "nurse",
sayName: function() {
console.log(this.name);
}
};Person.prototype = {
constructor: Person,
name: "Lucy",
age: 24,
job: "nurse",
friends: ["Lily", "Tom"],
sayName: function () {
console.log(this.name);
}
};
var person1 = new Person();
var person2 = new Person();
person1.friends.push("Jordan");
person2.friends //"Lily, Tom, Jordan"
person1.friends === person2.friends //truefunction Person(name, age, job) {
this.name = name;
this.age= age;
this.job = job;
this.friends = ["Lily","Tom"];
if (typeof this.sayName != "function") {
Person.prototype.sayName =function() {
console.log(this.name);
};
}
}function SpecialArray() {
var values = new Array();
values.push.apply(values, arguments);
values.toPipedString = function() {
return this.join("|");
};
return values;
}
var colors = new SpecialArray("red", "blue", "green");
colors.toPipedString(); //"red|blue|green"
person.name = "Lucy";
person.age = 24;
person.job = "nurse";
person.sayName = function() {
console.log(this.name);
};function createPerson(name, age, job) {
var o = new Object();
o.name = name;
o.age= age;
o.job = job;
o.sayName = function() {
console.log(this.name);
};
return o;
}
var person1 = function("Lucy", 24, "nurse");
var person2 = function("Tom", 22, "engineer");person1.constructor === Person //true
person2.constructor === Person //truefunction Person(name, age, job) {
this.name = name;
this.age= age;
this.job = job;
this.sayName = new Function("console.log(this.name)");
}function Person() {
}
Person.prototype.name = "Lucy";
Person.prototype.age= 24;
Person.prototype.job = "nurse";
Person.prototype.sayName = function() {
console.log(this.name);
};
var person1 = new Person();
var person2 = new Person();
person1.sayName() //Lucy
person2.sayName() //LucyObject.getPrototypeOf(person1) === Person.prototype //true
Object.getPrototypeOf(person1).name //"Lucy"delete person1.name;
person1.name //Lucy (来自原型对象)person2.name; //Lucy (来自原型对象)
"name" in person2; //true
person2.hasOwnProperty("name"); //false
person2.name = "Jordan";
"name" in person2; //true
person2.hasOwnproperty("name"); //truefunction Person() {
}
Person.prototype = {
name: "Lucy",
age: 24,
job: "nurse",
sayName: function() {
console.log(this.name);
}
};Person.prototype = {
constructor: Person, //主动声明constructor
name: "Lucy",
age: 24,
job: "nurse",
sayName: function() {
console.log(this.name);
}
};function Person() {
}
var person1 = new Person();
Person.prototype = {
constructor: Person,
name: "Lucy",
age: 24,
job: "nurse",
sayName: function() {
console.log(this.name);
}
};Person.prototype = {
constructor: Person,
name: "Lucy",
age: 24,
job: "nurse",
friends: ["Lily", "Tom"],
sayName: function () {
console.log(this.name);
}
};
var person1 = new Person();
var person2 = new Person();
person1.friends.push("Jordan");
person2.friends //"Lily, Tom, Jordan"
person1.friends === person2.friends //truefunction Person(name, age, job) {
this.name = name;
this.age= age;
this.job = job;
this.friends = ["Lily","Tom"];
if (typeof this.sayName != "function") {
Person.prototype.sayName =function() {
console.log(this.name);
};
}
}function SpecialArray() {
var values = new Array();
values.push.apply(values, arguments);
values.toPipedString = function() {
return this.join("|");
};
return values;
}
var colors = new SpecialArray("red", "blue", "green");
colors.toPipedString(); //"red|blue|green"
相关文章推荐
- JsonModel&AFNetWorking
- JavaScript学习要点(五)
- 服务器采用JSON格式返回数据给安卓客户端
- JSONModel 简单例子
- js刷新窗口 (父窗口,以及点确定后的当前窗口) 一般用于页面数据刷新重新加载
- 实时显示裁剪的DEM生成的等高线
- javascript笔试面试题
- JavaScript继承方式详解
- avalon.js 多级下拉框实现
- JS的事件监听机制
- Extjs-Grid-动态生成columns
- [JSON] JSON入门指南
- maven 加入json-lib.jar 报错 Missing artifact net.sf.json-lib:json-lib:jar:2.4:compile
- js获取各种宽高方法
- Js_日期格式化
- 用UglifyJS2合并压缩混淆JS代码
- 详解js跨域问题
- javascript中的“向量”
- AgularJS中Unknown provider: $routeProvider解决方案
- javascript实现网页屏蔽Backspace事件,输入框不屏蔽