给对象添加方法和属性

  为了减少所写JS代码对全局环境的污染, 可以采用对象写法来实现命名空间技术,

以使得局部变量和函数都在对象中作为属性存在,它们组成某个主题(对象名称体现)的相关属性和方法的集合。

如下例:


var MyLib = {}; // global Object cointainer
MyLib.value = 1;
MyLib.increment = function() { MyLib.value++; }
MyLib.show = function() { alert(MyLib.value); }

MyLib.value=6;
MyLib.increment();
MyLib.show(); // alerts 7

  对象定义中每个属性的定义相对对象松散,优化下:

var MyLib = {
value:1,
increment:function() {this.value++; },
show: function() { alert(this.value); }
};

  如何给已有对象添加属性和方法?

  优化后的代码是类库的一般写法,直接修改不是合适的,库的内容也不容易修改,修改了也不符合开闭法则;

  使用优化前的方法 MyLib.xxx = yyy 来实现,可以满足单实例对象, 但是对于多个实例情况,并且多个属性和方法需要添加,

每个实例的待添加的属性和方法又是一致的,方法定义为公共函数, 每个实例都设置一遍所需的属性和方法,着实显得笨重。

    查阅 apply 和 call
的用法(http://sjolzy.cn/Understanding-JavaScript-in-argumentscalleecallerapply.html),

可以构造一个属性和方法定义函数, 属性和方法的前缀为this., 然后使用call将this绑定到具体对象上,就实现了对象扩展。


function base() {
this.member =" dnnsun_Member";
this.method =function() {
window.alert(this.value);
}
}

var extObj = {
value: 2
}
base.call(extObj);
extObj.method(); // alert 2

  不仅仅对于普通的对象生效, 对于DOM对象也是生效的, 且对于已经绑定过的DOM对象,其克隆仍然具备扩展的特性。

下面给出完整测试代码:


<html>
<head>
</head>
<body>
<input id="button" type="button" value="I am a button"/>
<script type=‘text/javascript‘>
// 待扩展函数
function base() {
this.member =" dnnsun_Member";
this.method =function() {
window.alert(this.value);
}
}

/************ Plain OBJECT *******************/
var extObj = {
value: 2
}
base.call(extObj);
extObj.method();
/************ Plain OBJECT *******************/

/************ DOM OBJECT *******************/
base.call(document.getElementById("button"));
document.getElementById("button").method()

var node = document.getElementById("button").cloneNode(true);
document.getElementsByTagName("body")[0].appendChild(node);
document.getElementById("button").value += "(clone)";
document.getElementById("button").method();
/************ DOM OBJECT *******************/
</script>
</body>
</html>

给对象添加方法和属性

时间: 2024-11-01 00:17:16

给对象添加方法和属性的相关文章

类、对象、方法、属性和实例变量

放置方法的程序单元是类,类中提供一个或多个方法,为类执行任务. 方法执行一个任务,并可返回一个结果. 类的实例称为对象. 给对象发送消息称为一个方法调用,告诉对象要执行一个任务. 对象有属性,可以在程序中使用,这些属性在对象的类中用字段指定属性. public class Count//每个类声明包含关键字class加类名,public是访问修饰符 { //类通常有一个或多个方法,操纵属于该类的特定对象的属性,属性在类中声明表示为变量,这种变量在类中声明,放在方法体之外. //属性声明可以有ge

iOS 给系统的对象添加额外的属性----关联属性

@interface NSObject (Objc) // @property (nonatomic, strong) NSString *name; // 在分类中 给系统的类添加属性, 一搬系统的类不能添加额外的属性 @end #import "NSObject+Objc.h" #import <objc/message.h> @implementation NSObject (Objc) //static NSString *_name; -(void)setName

对象继承其他对象的方法和属性

顶一个扩展函数,用来将第二个参数及以后的属性.方法拷贝给第一个函数: <script> // var extend=(function(){}()); 这是格式 var extend=(function(){ var p; var result=p in {toString:null}; if(result){ //检测p是否存在toString属性,这是一个检测 看是否可以可枚举 所以用toString这个为代表 return function extend(o){ for(var i=1;

iOS类添加方法、属性学习笔记

一.在运行时为类添加方法 我们首先定义了一个EmptyClass,继承NSObject,没有任何自带方法,接着定义了一个函数.这里提一句,Obj-C的方法(method)就是一个至少需要两个参数(self,_cmd)的C函数,这个函数仅仅输出一句Hello.接下来在addMethod方法中,我们调用class_addMethod()为EmptyClass添加方法,class_addMethod()是这样定义的: BOOL class_addMethod(Class cls, SEL name,

window对象的方法和属性汇总【总结--window对象】

window对象有以下方法: open close alert confirm prompt setTimeout clearTimeout setInterval clearInterval moveBy moveTo resizeBy resizeTo scrollBy scrollTo find back forward home stop print blur focus captureEvent enableExternalCapture disableExternalCapture

window对象的方法和属性汇总

open close alert confirm prompt setTimeout clearTimeout setInterval clearInterval moveBy moveTo resizeBy resizeTo scrollBy scrollTo find back forward home stop print blur focus captureEvent enableExternalCapture disableExternalCapture handleEvent rel

给JavaScript 对象添加方法

方法只不过是附加在对象上的函数. 在构造器函数内部定义对象的方法: 1 <!DOCTYPE html> 2 <html> 3 <body> 4 <script> 5 function person(firstname,lastname,age,eyecolor) 6 { 7 this.firstname=firstname; 8 this.lastname=lastname; 9 this.age=age; 10 this.eyecolor=eyecolor

类和对象的方法与属性---懒加载与私有事件---单例与私有化构造函数

对象属性: 1.private修饰的属性:只能在本类内部访问,分类和外部都不能访问(彻底私有) 2.fileprivate修饰的属性:在本类和分类中可以访问,外部不能访问(部分私有) 3.直接用let或var修饰的属性:在本类.分类和外部都可以访问(开放) 4.在分类中只能声明计算属性,不能声明存储属性 1 // 属性:可以被外界访问 2 var name:String? 3 4 // private修饰的属性:只能在本类内部访问,分类和外部都不能访问 5 private var age:Str

js 为对象添加和删除属性

对于一个普通的js对象: var obj = { name:"mary", age:21 } 如果我们要对它添加新属性的话可以使用下列方式: obj.address = "北京" //{name: "mary", age: "21", address: "beijing"} 删除属性,需要使用delete方法: delete obj.name //{age: "21", address: