• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 网页制作 > JavaScript >

JS面向对象教程(5)

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-02-06点击:

  首先,我们需要定义一个Composition的函数:(target是作用于是对象,source是源对象),下面这个代码还是很简单的,就是把source里的属性一个一个拿出来然后定义到target中。

  function Composition(target, source)

  {

  var desc = Object.getOwnPropertyDescriptor;

  var prop = Object.getOwnPropertyNames;

  var def_prop = Object.defineProperty;

  prop(source).forEach(

  function(key) {

  def_prop(target, key, desc(source, key))

  }

  )

  return target;

  }

  有了这个函数以后,我们就可以这来玩了:

//艺术家 
var Artist = Object.create(null); 
Artist.sing = function() { 
    return this.name + ' starts singing...'; 

Artist.paint = function() { 
    return this.name + ' starts painting...'; 

  
//运动员 
var Sporter = Object.create(null); 
Sporter.run = function() { 
    return this.name + ' starts running...'; 

Sporter.swim = function() { 
    return this.name + ' starts swimming...'; 

  
Composition(Person, Artist); 
document.write(Person.sing() + '<br>'); 
document.write(Person.paint() + '<br>'); 
  
Composition(Person, Sporter); 
document.write(Person.run() + '<br>'); 
document.write(Person.swim() + '<br>'); 
  
//看看 Person中有什么?(输出:sayHello,sing,paint,swim,run) 
document.write('<p>' + Object.keys(Person) + '<br>');

  Prototype 和 继承

  我们先来说说Prototype。我们先看下面的例程,这个例程不需要解释吧,很像C语言里的函数指针,在C语言里这样的东西见得多了。

var plus = function(x,y){ 
    document.write( x + ' + ' + y + ' = ' + (x+y) + '<br>'); 
    return x + y; 
}; 
  
var minus = function(x,y){ 
    document.write(x + ' - ' + y + ' = ' + (x-y) + '<br>'); 
    return x - y; 
}; 
  
var operations = { 
    '+': plus, 
    '-': minus 
}; 
  
var calculate = function(x, y, operation){ 
    return operations[operation](x, y); 
}; 
  
calculate(12, 4, '+'); 
calculate(24, 3, '-');

  那么,我们能不能把这些东西封装起来呢,我们需要使用prototype。看下面的示例:

  var Cal = function(x, y){

  this.x = x;

  this.y = y;

  }

  Cal.prototype.operations = {

  '+': function(x, y) { return x+y;},

  '-': function(x, y) { return x-y;}

  };

  Cal.prototype.calculate = function(operation){

  return this.operations[operation](this.x, this.y);

  };

  var c = new Cal(4, 5);

  c.calculate('+');

  c.calculate('-');

  这就是prototype的用法,prototype 是javascript这个语言中最重要的内容。网上有太多的文章介始这个东西了。说白了,prototype就是对一对象进行扩展,其特点在于通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所称的“原型”,这个原型是可定制的(当然,这里没有真正的复制,实际只是委托)。上面的这个例子中,我们扩展了实例Cal,让其有了一个operations的属性和一个calculate的方法。

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1978130638@qq.com ,  QQ