面向对象程序设计---创建对象
来源:互联网 发布:制作菜单图片软件 编辑:程序博客网 时间:2024/05/28 05:18
方法一:
对象字面量
方法二:
Object构造函数
方法三:工厂模式
function createPerson(name,age,job){
var o = new Object();
o.name = name;
o.age = age ;
o.job = job;
ob.sayName = function()
{
alert(this.Name);
}
retuen o ;
}
工厂模式虽然解决了创多个相似对象的问题,但没有解决对象识别的问题。
var person1 = createPerson('nic',29,'ss');
var person2 = createPerson('nic',22,'ss');
构造函数模式---与工厂模式的不同有三点:没有显示的创建对象;没有return 语句;直接将属性与方法赋值给了this对象;构造实例使用new关键字
function Person(name,age,job){
this.name = name;
this.age= age;
this.job=job;
this.sayName = function(){
alert(this.name);
}
}
var person1 = new Person("aa",22,"coder");
var person2 = new Person("b",33,"writer");
这样创建的两个对象实例都有自己的构造函数,创建的对象是Object的实例,也是Person的实例
alert(person1.constructor==Person);//true
alert(person1 instanecof Object);//true
alert(person1 instanecof Person);//true
构造函数和普通函数的区别----只是调用方式不同,任何函数只要通过new操作符来调用,它就可以作为构造函数
构造函数三种调用方式
一
//当作构造函数调用
var person = new Person("nic",29,"software enginner");
person.sayName();
二
//当作普通函数调用
Person("Gerg",27"doctor");
window.sayName();
三
//在另一个对象的作用域中调用
var o = new Object();
Person.call(o,"kine”,25,"nurse");
o.sayName();
构造函数的问题:每个方法都要在每个实例上重新创建一遍即(person1.sayName == person2.sayName);//false
原型模式
我们创建 的每个函数都有一个原型属性,这个属性是一个指针,指向一个对象。
function Person(){}
Person.prototype.name = "Nicholas";
Perosn.protptype.age = 29;
Person.prototype.job = "soft engineer";
Person.prototype.sayName = function(){
alert(this.name)
}
var person1 = new Person();
person1.sayName();
var person2 = new Person();
alert(person1.sayName == person2.sayName);//true
每次访问对象属性的原理:首先搜索对象实例本身,如果没找到再搜索原型对象中有没有改名字的属性
实例的属性是在自己实例中获取或者在原型中获取
person1.hasOwnProperty("name")//只有存在实例中才返回true
person1.hsaPrototypeProperty()//如果存在实例中就返回false
alert("name" in person1);//来自原型或者实例都返回true
原型属性遍历
var key = Object.keys(Person.prototype);
更简单的原型语法
function Perosn(){}
Person.protptype={
name :"nick",
age :29
job :"softwarw engineer",
sayName:function(){
}
};
var friend = new person();
alert(friend instanceof Object);//true
alert(friend instanceof Object);//true
alert(friend.constructor == Person);//false
alert(friend.constructor == Object);//true
对原型所做的修改都可以反映在实例中,都是先在实例中搜索sayHi属性,没有找到的情况下,会继续搜索原型
var friend = new Person();
Person.prototype.sayHi = function(){
alert("hi");
}
friend.sayHi();//“hi”
实例中的指针仅仅指向原型,而不指向构造函数
function Person(){}
var friend = new Person();
Person.prototype = {
constructor:Person,
name:"nick",
age :29,
job:"software engineer",
sayName:function(){
alert(this.name);
}
}
原型模式的问题缺陷:所有的实例在默认情况下都取得相同的属性值;一个实例修改;了原型值,其他实例受到影响
- 面向对象程序设计---创建对象
- JavaScript高级程序设计【面向对象-创建对象】
- 面向对象的程序设计(创建对象)
- JS面向对象程序设计之创建对象
- javascript 面向对象程序设计一:创建对象
- 第6章:面向对象的程序设计--创建对象
- javascript复习笔记五----面向对象程序设计(创建对象)
- JavaScript高级程序设计【面向对象-创建对象2】
- JS面向对象程序设计之创建对象模式
- js中的面向对象程序设计(2)-创建对象
- JavaScript面向对象程序设计—创建对象的模式
- 面向对象的程序设计(4)创建对象
- 面向对象的程序设计——创建对象
- JavaScript面向对象的程序设计1(创建对象)
- 【JavaScript学习】面向对象的程序设计(2):创建对象
- java面向对象程序设计:对象
- C++面向对象程序设计
- 面向对象程序设计
- 浅谈Oracle select for update
- Spring boot 下使用RabbitMQ报错:406
- 如何去掉String[]数组中的重复项
- Java中关于HashMap的元素遍历的顺序问题
- 【整理】Word OpenXML常用标签
- 面向对象程序设计---创建对象
- Windows虚拟内存简介
- 【安全牛学习笔记】XSS- 键盘记录器和反射型XSS
- 【OpenGL】理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式
- 4.2、从RDBMS向Neo4j导数据【专题四:数据处理】
- pycharm中代码补全,代码提示功能
- java线程组和线程池的概念
- thinkphp5.0学习(一):准备
- bzoj 2753: [SCOI2012]滑雪与时间胶囊 最小生成树