[Javascript] Prototype 2 Object.create()

本文介绍了一种围栏桩对象的构造方法,并通过原型优化来减少内存资源占用。文章详细展示了如何创建围栏桩对象,实现连接及属性设置,并通过原型方式实现了方法共享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

function Fencepost (x, y, postNum){
  this.x = x;
  this.y = y;
  this.postNum = postNum;
  this.connectionsTo = [];
}
Fencepost.prototype = {
  sendRopeTo: function ( connectedPost ){
    this.connectionsTo.push(connectedPost);
  },
  removeRope: function ( removeTo ){
    var temp = [];
    for(var i = 0; i<this.connectionsTo.length; i++){
      if(this.connectionsTo[i].postNum != removeTo){
        temp.push(this.connectionsTo[i]);
      }
    }
    this.connectionsTo = temp;
  },
  movePost: function (x, y){
    this.x = x;
    this.y = y;
  },
  valueOf: function (){
  return Math.sqrt( this.x*this.x + this.y*this.y );
  },
  toString: function(){
    var list = this.connectionsTo.map(function(each){
        return each.postNum + "\n";
    });
    return 'Fence post #'+this.postNum+":\n"+
      'Connected to posts:'+
      list+"\n"+
      'Distance from ranch: '+this.valueOf()+
      ' yards';
      
  }
};

 

var genericPost = 
  {x: 0, y: 0, postNum: undefined,
   connectionsTo: undefined,
   sendRopeTo: function ( connectedPost ) {
     if(this.connectionsTo == undefined){
       var postArray = [ ];
       postArray.push(connectedPost);
       this.connectionsTo = postArray;
     } else {
       this.connectionsTo.push(connectedPost);
     }
   }
  };
var post1 = Object.create(genericPost);  //将继承genericPost中所有的属性
var post2 = Object.create(genericPost);
post1.x = -2;
post1.y = 4;
post1.postNum = 1;
post2.x = 5;
post2.y = 1;
post2.postNum = 2;
post1.sendRopeTo(post2);
post2.sendRopeTo(post1);

 

Below are the data for three posts that need to be created using the genericPost as a prototype (as in the last challenge). The cowboys have given you all the data you’ll need to build each using the prototype and then assign unique property values through modification. Call each of your posts post<number>, just like you did in the last challenge.

  1. x: 0, y: -3,
    postNum: 8,
    connectionsTo: 10

  2. x: 6, y: 8,
    postNum: 9,
    connectionsTo: 10

  3. x: -2, y: 3,
    postNum: 10,
    connectionsTo: 8, 9

The cowboy-devs have prepared a list of additions that need to happen for certain special fence posts. After you’ve built the above three posts, add properties to those post where the cowboy-devs have deemed appropriate.

  1. Any fence posts with an even ‘y’ coordinate have a birdhouse, and therefore have a numBirds property initially set to 0.
  2. Any fence posts connected to Post #9, but are not Post #9, have a property of weathervane initially set to “N”.
  3. Even numbered fence posts have emergency lights, and a lightsOn property initially set to false.

The base fencepost is again provided for your reference. There are many single lines of code to be entered on this one, so be careful to assign all properties necessary.

var genericPost = {
  x: 0, 
  y: 0, 
  postNum: undefined, 
  connectionsTo: undefined,
  sendRopeTo: function ( connectedPost ) {
    if(this.connectionsTo == undefined){
      var postArray = [ ];
      postArray.push(connectedPost);
      this.connectionsTo = postArray;
    } else {
      this.connectionsTo.push(connectedPost);
    }
  }
};
var post8 = Object.create(genericPost);
var post9 = Object.create(genericPost);
var post10 = Object.create(genericPost);
post8.x = 0;
post8.y = -3;
post8.postNum = 8;
post8.sendRopeTo(post10);
post9.x = 6;
post9.y = 8;
post9.postNum = 9;
post9.sendRopeTo(post10);
post10.x = -2;
post10.y = 3;
post10.postNum = 10;
post10.sendRopeTo(post8);
post10.sendRopeTo(post9);
post9.numBirds = 0;
post10.weathervane = "N";
post8.lightsOn = false;
post10.lightsOn = false;

 

So now that’s there’s eleventy-billion fence posts everywhere, the cowboy-devs have noticed a significant drain on their memory resources. They’d like you to take a look around the Fencepost constructor and see if there’s anything you can add to a prototype, so that every stinkin’ fence post doesn’t have to carry around anything that it could get from just one place.

Below is the current status of the constructor, with some additions the cowboy-devs have made to improve functionality of the fence post objects. Your job is to identify the portions of the constructor that should be available to ALL fenceposts, and put those in a prototype for fence posts. Your answer should include the modified constructor as well as the newly designed prototype for that constructor. Good luck, pardner.

function Fencepost (x, y, postNum){
  this.x = x;
  this.y = y;
  this.postNum = postNum;
  this.connectionsTo = [];
  this.sendRopeTo = function ( connectedPost ){
    this.connectionsTo.push(connectedPost);
  };
  this.removeRope = function ( removeTo ){
  var temp = [];
  for(var i = 0; i<this.connectionsTo.length; i++){
     if(this.connectionsTo[i].postNum != removeTo){
       temp.push(this.connectionsTo[i]);
     }
  }
    this.connectionsTo = temp;
  }
  this.movePost = function (x, y){
    this.x = x;
    this.y = y;
  };
}

Answer:

function Fencepost (x, y, postNum){
  this.x = x;
  this.y = y;
  this.postNum = postNum;
    this.connectionsTo = [];
}

Fencepost.prototype = {
  sendRopeTo: function ( connectedPost ){
    this.connectionsTo.push(connectedPost);
  },
  removeRope: function ( removeTo ){
  var temp = [];
  for(var i = 0; i<this.connectionsTo.length; i++){
     if(this.connectionsTo[i].postNum != removeTo){
       temp.push(this.connectionsTo[i]);
     }
  }
    this.connectionsTo = temp;
  },
  movePost : function (x, y){
    this.x = x;
    this.y = y;
  };  
};

转载于:https://www.cnblogs.com/Answer1215/p/3903162.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值