[Javascript] Prototype 2 Object.create()
- 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.
x: 0, y: -3,
postNum: 8,
connectionsTo: 10x: 6, y: 8,
postNum: 9,
connectionsTo: 10x: -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.
- Any fence posts with an even ‘y’ coordinate have a birdhouse, and therefore have a
numBirds
property initially set to 0. - Any fence posts connected to Post #9, but are not Post #9, have a property of
weathervane
initially set to “N”. - 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;
- };
- };
[Javascript] Prototype 2 Object.create()的更多相关文章
- Object.create() __https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create
Object.create() 方法会使用指定的原型对象及其属性去创建一个新的对象. 语法 Object.create(proto[, propertiesObject]) 参数 proto 新创建对 ...
- javascript的创建对象object.create()和属性检测hasOwnPrototype()和propertyIsEnumerable()
Object.create("参数1[,参数2]")是E5中提出的一种新的对象的创建方式. 第一个参数是要继承到新对象原型上的对象; 第二个参数是对象属性.这个参数可选,默认为fa ...
- Object.create
var emptyObject = Object.create(null); var emptyObject = Object.create(null); var emptyObject = {}; ...
- 前端开发者进阶之ECMAScript新特性【一】--Object.create
Object.create(prototype, descriptors) :创建一个具有指定原型且可选择性地包含指定属性的对象 参数:prototype 必需. 要用作原型的对象. 可以为 nul ...
- firefox-Developer开发者站点——关于Object.create()新方法的介绍
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create Objec ...
- js-new、object.create、bind的模拟实现【转载备忘】
//创建Person构造函数,参数为name,age function Person(name,age){ this.name = name; this.age = age; } function _ ...
- js Object.create 初探
1.作用 Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__. https://developer.mozilla.org/zh-CN/docs/W ...
- ECMAScript新特性【一】--Object.create
Object.create(prototype, descriptors) :创建一个具有指定原型且可选择性地包含指定属性的对象 参数: prototype 必需. 要用作原型的对象. 可以为 nu ...
- ES5 Object.create 方法
Object.create(proto[, propertiesObject])The Object.create() method creates a new object with the spe ...
随机推荐
- BZOJ 2115: [Wc2011] Xor 线性基 dfs
https://www.lydsy.com/JudgeOnline/problem.php?id=2115 每一条从1到n的道路都可以表示为一条从1到n的道路异或若干个环的异或值. 那么把全部的环丢到 ...
- 压缩的问题-----WriteUp
原题:http://ctf5.shiyanbar.com/crypto/winrar/ 526172211A0700CF907300000D0000000000000056947424965E 006 ...
- Remove-Invalid-Parentheses-题解
题意 Remove the minimum number of invalid parentheses in order to make the input string valid. Return ...
- centos7安装redis-4.0.1集群
试验机操作系统:CentOS Linux release 7.2.1511 (Core) 本文的目的是教会大家快速搭建redis集群,完了再深入学习. 试问如果不上手试验,看的资料再多有个毛用? 下载 ...
- paypal对接
paypal支付接口准备工作 首先去申请一个paypal账号,https://www.paypal.com/. 申请完毕并登录,进入https://developer.paypal.com/devel ...
- Go语言Web框架gwk介绍 (四)
事件 gwk支持事件系统,但并没有硬编码有哪些事件,而是采用了比较松散的定义方式. 订阅事件有两种方式: 调用On函数或者OnFunc函数 func On(moudle, name string, h ...
- 设置Linux SSH登录后的欢迎信息
在这几个文件,各自都设置一下: /etc/motd /etc/issue 在/etc/ssh/sshd_config添加“Banner /etc/ssh/ssh_login_banner” 内容: \ ...
- BZOJ 1500: [NOI2005]维修数列 (splay tree)
1500: [NOI2005]维修数列 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 4229 Solved: 1283[Submit][Status ...
- java 实现输出姓和名
package xiaojie; import java.util.Scanner; public class baiJiaXing { public static void main(String[ ...
- UVa409_Excuses, Excuses!(小白书字符串专题)
解题报告 题意: 找包括单词最多的串.有多个按顺序输出 思路: 字典树爆. #include <cstdio> #include <cstring> #include < ...