jsci框架 面向对象 写法插件写法,还是很好理解的

Javascript(12)
1.JavaScript中,除了string,number,boolean,null,undefined,其他数据都是对象,甚至包括数组、日期和函数。
2.ECMA-262定义:对象是属性的无序集合,每个属性存放一个原始值、对象或函数,对象是无特定顺序的值的数组
3.对象是一种特殊的数据类型可以包含多个成员,其中分为两种:属性和方法:
属性即封装对象的数据,表示与对象有关的值,用法即对象名.属性名
方法即封装对象的行为,表示对象可以执行的行为或可完成的功能,用法即对象名.方法名();
对象的分类
1.内置对象/原生对象,指JavaScript中本身预定义的对象,由ECMAScript标准定义,由各浏览器厂家来提供实现,如下:
String,Number,Boolean
Object,Function
Array,Date,RegExp,Math
Error,EvalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError
2.宿主对象(host object) ,指JavaScript运行环境即浏览器提供的对象,由浏览器厂家自定义,具体分为两大类:
3.自定义对象,由用户创建的对象,创建方法如下:
1).对象直接量
由名值对组成的映射表,名值对之间以逗号隔开,名和值之间以冒号隔开,如:
var obj={name:&Horry&,age:23}
2).new Object(); 如以下方式:
-利用内置对象,使用new关键字 var obj=new Date();
-添加属性 var obj=new Object(); boj.name=&John&;obj.age=&23&;
-若构造方法没有参数,则可以省略()
3).function对象模板
使用function模板批量创建某种类型的多个实例且具备相同的基础属性
利用模板定义对象的属性,对象模板中使用this关键字声明对象的属性
利用模板定义对象的方法,对象模板中使用this关键字声明对象的方法
重写方法,以tostring()方法为例
JavaScript中,this关键字用在方法内,专门引用正在被调用的方法当前所在的对象
对象的属性
& 一个对象可以声明若干个属性
通过对象的引用、使用. 或[]运算符来访问对象的属性
遍历属性,通过for...in循环遍历对象内的所有属性
属性访问错误
若读取一个本身就不存在的属性,以及属性值是undefined的属性,那么返回值也是undefined
检测属性是否存在:
1.使用in关键字 :console.log(&ename& &in emp1);
2.使用对象的hasOwnProperty();方法 :console.log(emp1.hasOwnProperty(&ename&));
3.使用undefined判断 :console.log(emp1.ename === undefined);
4.在条件语句中直接判断,如if(emp1.ename){...}
对象的方法
方法即指对象可以实施的行为或完成的功能
方法的调用一般通过对象的引用来调用,比如emp1.ename=&Harry&
JavaScript 面向对象(oop)
oop即面向对象的语言,有三大特点:
——把相关的信息(无论数据或方法)存储在对象中
——从其他对象获得属性和方法
——能以多种不同的形式运行函数或方法
原型与继承
在JavaScript中,函数本身也是一个包含了方法和属性的对象,每个函数都有prototype属性,该属性引用的就是原型对象。
原型对象是保存共享属性值和共享方法的对象,同时JavaScript并没有规定一个函数的原型类型,因此原型可以是任何类型
2.内存图描述:
3.删除属性
可以使用delete关键字删除,如: delete emp1. &delete emp1.prototype.
4.自有属性与原型属性
1).自有属性:通过对象的引用添加的属性,其他对象即使有此属性,也是相互独立的;
2).原型属性:从原型对象中继承来的属性,一旦原型对象中属性值改变,所有继承自该原型的对象属性均改变
3).自有属性覆盖(重写)原型属性。
①使用hasOwnProperty()检测对象是否具备指定自有属性;
②使用in检测对象及其原型链中是否具备指定属性。
5.对象的prototype属性
1).自定义对象的prototype属性:
-new创建的对象,使用其构造函数的prototype作为原型
-对象直接量的原型为:Object.prototype
2).内置对象的prototype属性,如:Array对象,Boolean对象,Date对象,String对象,Number对象。
6.获取原型
获取原型,进而可实现共享属性的两种方法:
1).使用构造函数的prototype属性
2).使用专门的getPrototypeOf()方法
在JavaScript中,原型对象本身也有原型,构造函数的原型对象中也有一个_proto_属性,默认指向Object类型的原型对象
Object.prototype是所有对象的原型,其中包括了所有对象共有的属性和方法,如tostring();
事实上,所有对象通过_proto_属性的引用关系,都可以直接或间接的引用到Object.prototype对象;
我们将使用对象的_proto_属性,形成逐级引用的关系,称为原型链。
&- 内存图描述
1.继承的实现方式:
通过原型实现继承有以下两种方式:
1).修改构造函数的原型,为该构造函数创建的对象指定统一的父级对象。语法:构造函数.prototype=父级对象;
注意:1.修改原型后,用此构造函数创建的新对象,均引用新原型。
2.修改原型之前,用此构造函数创建的对象,将无法使用新原型,依然使用旧原型,因此被孤立。
2).单独修改一个对象的原型,而不影响其他对象的原型,语法:Object.setPrototypeOf(子对象,父对象);
2.检查对象的原型
isPrototypeOf()用于判断一个prototype对象是否存在于另一个对象的原型链中,如果是返回true,否则false。
3.只继承于原型
& ——出现效率的考虑,应尽可能的把可重用的属性和方法添加到原型中去
1).不要单独为继承关系创建新对象;
2).尽量减少运行时的方法搜索,如tostring()
4.继承与扩展
JavaScript中的继承基于prototype,而不是基于类。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:7059次
排名:千里之外
原创:23篇2014年5月 Web 开发大版内专家分月排行榜第二2014年4月 Web 开发大版内专家分月排行榜第二
2014年3月 Web 开发大版内专家分月排行榜第三2014年2月 Web 开发大版内专家分月排行榜第三2013年7月 .NET技术大版内专家分月排行榜第三2013年6月 .NET技术大版内专家分月排行榜第三2012年9月 .NET技术大版内专家分月排行榜第三
2011年6月 Web 开发大版内专家分月排行榜第二
2013年12月 Web 开发大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。js创建对象的几种常用方式小结(推荐)-js面向对象
最近在看javascript高级程序设计,其中对对象的创建做了具体的阐述,综合起来,总结了下(je知识库javascript专栏由这方面的教程,有兴趣的可以去知识库看看)
第一种模式:工厂方式 复制代码 代码如下: var lev=function(){ return "脚本之家"; }; function Parent(){ var Child = new Object(); Child.name="脚本"; Child.age="4"; Child.lev= return C }; var x = Parent(); alert(x.name); alert(x.lev());
说明: 1.在函数中定义对象,并定义对象的各种属性,,虽然属性可以为方法,但是建议将属性为方法的属性定义到函数之外,这样可以避免重复创建该方法 2.引用该对象的时候,这里使用的是 var x = Parent()而不是 var x = new Parent();因为后者会可能出现很多问题(前者也成为工厂经典方式,后者称之为混合工厂方式),不推荐使用new的方式使用该对象 3.在函数的最后返回该对象 4.不推荐使用这种方式创建对象,但应该了解 第二种模式:构造函数方式 复制代码 代码如下: var lev=function(){ return "脚本之家"; }; function Parent(){ this.name="脚本"; this.age="30"; this.lev= }; var x =new Parent(); alert(x.name); alert(x.lev());
说明: 1.与工厂方式相比,使用构造函数方式创建对象,无需再函数内部重建创建对象,而使用this指代,并而函数无需明确return 2.同工厂模式一样,虽然属性的值可以为方法,扔建议将该方法定义在函数之外 3..同样的,不推荐使用这种方式创建对象,但仍需要了解 第三种模式:原型模式 复制代码 代码如下: var lev=function(){ return "脚本之家"; }; function Parent(){ }; Parent.prototype.name="李小龙"; Parent.prototype.age="30"; Parent.prototype.lev= var x =new Parent(); alert(x.name); alert(x.lev());
说明: 1.函数中不对属性进行定义 2.利用prototype属性对属性进行定义 3.同样的,不推荐使用这样方式创建对象 第四种模式:混合的构造函数,原型方式(推荐) 复制代码 代码如下: function Parent(){ this.name="脚本"; this.age=4; }; Parent.prototype.lev=function(){ return this. };; var x =new Parent(); alert(x.lev());
说明:1.该模式是指混合搭配使用构造函数方式和原型方式 2.将所有属性不是方法的属性定义在函数中(构造函数方式) 将所有属性值为方法的属性利用prototype在函数之外定义(原型方式) 3.推荐使用这样方式创建对象,这样做有好处和为什么不单独使用构造函数方式和原型方式,由于篇幅问题这里不予讨论 第五种模式:动态原型方式 复制代码 代码如下: function Parent(){ this.name="脚本"; this.age=4; if(typeof Parent._lev=="undefined"){ Parent.prototype.lev=function(){ return this. } Parent._lev= } }; var x =new Parent(); alert(x.lev());
说明: 1.动态原型方式可以理解为混合构造函数,原型方式的一个特例 2.该模式中,属性为方法的属性直接在函数中进行了定义,但是因为 复制代码 代码如下: if(typeof Parent._lev=="undefined"){ Parent._lev=}
从而保证创建该对象的实例时,属性的方法不会被重复创建 3.,推荐使用这种模式JS面向对象(一)-----------理解对象 - 博客频道 - CSDN.NET
陪你上房揭瓦的博客
分类:JavaScript
[[Configurable]]
表示是否能是同delete删除
[[Enumerable]]
是否能通过for-in循环
[[Writable]]
能否修改属性的值
这个属性的数据值
前三个默认是true,
如果想修改的话,方法是
var person = {};
Object.defineProperty{person,"name",{
writable:false,
value:"sun"
这样子的话,person.name就不能被修改了。
注意的是: 调用defineProperty之后,如果不设置的话,前三个属性都是false
这个应该不怎么用吧,有点像java里的静态变量和静态方法;
访问器属性
定义多个属性
1.1中代码只是定义一个属性,如果是多个的话,使用Object.defineProperties()方法
Object.defineProperty{person,{
writable:false,
value:"sun"
writable:false,
读取属性的特性
Object.getOwnPropertyDescriptor()方法
var person = {};
Object.defineProperty(person,'name',{
writable:false,
value:'sun'
person.name = 'jia';
delete person.
alert(person.name);
var a = Object.getOwnPropertyDescriptor(person,"name");
alert(a.value);
排名:千里之外
(8)(3)(6)}

我要回帖

更多关于 js面向对象完美写法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信