首页 > 试题广场 >

批量改变对象的属性

[编程题]批量改变对象的属性
  • 热度指数:24064 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个构造函数 constructor,请完成 alterObjects 方法,将 constructor 的所有实例的 greeting 属性指向给定的 greeting 变量。
示例1

输入

var C = function(name) {this.name = name; return this;}; 
var obj1 = new C('Rebecca'); 
alterObjects(C, 'What\'s up'); obj1.greeting;

输出

What's up
prototype对象是实现 面向对象 的一个重要机制。每个函数也是一个对象,它们对应的类就是 function,每个 函数对象 都具有一个子对象prototype。Prototype 表示了该函数的原型,

prototype表示了一个类的属性的集合。当通过new来生成一个类的对象时,prototype对象的属

性就会成为实例化对象的属性。

发表于 2016-12-06 17:44:52 回复(1)
function alterObjects(constructor, greeting) {
    //添加prototype的作用就是添加一个公共方法,或者公共属性
   constructor.prototype.greeting=greeting;
}

发表于 2017-05-03 20:55:38 回复(4)
function alterObjects(constructor, greeting) {
	constructor.prototype.greeting = greeting;
}

测试通过!

发表于 2017-04-10 17:30:52 回复(0)
JavaScript权威指南(第六版)p205 JavaScript权威指南(第六版)p210

编辑于 2016-06-17 22:14:45 回复(0)
这是原型链问题。访问一个对象的方法或者是属性,首先会在该对象中寻找,如果找到则返回,如果没找到,则在其原型链上面向上寻找,直至基原型,如还未找到,则返回undefined。将 constructor 的所有实例的 greeting 属性指向给定的 greeting 变量,只需要在constructor的原型上面添加greeting属性,并指定值。
function alterObjects(constructor, greeting) {
  constructor.prototype.greeting = greeting;
 }

编辑于 2015-08-19 10:42:14 回复(3)
这个题的描述可以再坑爹点...
发表于 2018-05-18 21:10:55 回复(7)
    function alterObjects(constructor, greeting) {
        if(typeof constructor != 'function') throw('alterObjects():arguments error, should be function');
        constructor.prototype.greeting = greeting;
    }

发表于 2016-04-01 16:42:01 回复(4)
function alterObjects(constructor, greeting) {
    //实例的__proto__方法:
    //var obj =new constructor();
    //obj.__proto__.greeting = greeting;
    //构造函数的原型
    constructor.prototype.greeting = greeting;
}
考察的确实是原型链,通过原型链改变构造函数的属性,那么方法也有两种
首先,通过构造函数的原型来更改,也就是constructor.prototype
其次,通过实例的隐式原型来更改,即obj.__proto__
分析,其实二者是等价的,即实例的隐式原型指向其构造函数的显式原型。
发表于 2018-11-03 14:01:19 回复(0)
"将 constructor 的所有实例的 greeting 属性指向给定的 greeting 变量
解读: 1.所有的实例都要有一个gretting属性 2.gretting的值不是new实例时添加的,而是固定的(我们传入的greeting的值)
方式:将这个 名为gretting的 属性添加到构造函数的prototype上 ,实现实例共享
function alterObjects(constructor, greeting) {
   constructor.prototype.greeting = greeting }


发表于 2020-06-17 18:17:18 回复(0)
如果在对象上就有找到了greeting属性,改原型有什么用
function creatObj(){};
var obj=new creatObj();
obj.greeting=objgreeting;
creatObj.prototype.greeting=newgreeting;
并不能改变对象的greeting属性的指向,
只有在对象还没有new出来,而且构造函数中没有对greeting属性初始化是对象才会继承原型中的greeting属性
发表于 2019-11-15 10:44:45 回复(0)
思路:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。
代码如下:
function alterObjects(constructor, greeting) {
     constructor.prototype.greeting=greeting;  
     return constructor.greeting;  
}
发表于 2016-06-25 10:36:19 回复(3)
function alterObjects(constructor, greeting) {
    constructor.prototype.greeting = greeting
}
本题考查对于原型的理解以及原型与构造函数的关系:构造函数通过prototype 属性访问原型对象。通过修改构造函数的原型对象的greeting 属性,该构造函数的实例对象就可以通过原型,也能访问greeting 属性了
发表于 2021-07-31 13:22:47 回复(0)
function alterObjects(constructor, greeting) {
    constructor.prototype.greeting = greeting;
}
发表于 2020-03-26 14:11:45 回复(0)
MPT头像 MPT
请教一下,使用相同的代码,报错如下:terminate called after throwing an instance of 'boost::exception_detail::clone_impl what(): No such node (css)  
代码如图

发表于 2018-11-13 21:40:22 回复(1)

分析题意:
将 constructor 的所有实例的 greeting 属性指向给定的 greeting 变量。
那就是说实例都共享同一个变量,共享我们可以很容易想到prototype,它的作用就是实现属性方法共享.
所以可以在原型上定义greeting变量,则所有实例都可以通过obj.greeting访问到它.
实现的原理还是原型链的知识点.
function alterObjects(constructor, greeting) {
       constructor.prototype.greeting=greeting;
}

发表于 2018-09-30 21:21:29 回复(0)
function alterObjects(constructor, greeting) {
    return constructor.prototype.greeting=greeting
}
发表于 2023-06-09 10:00:30 回复(0)
function alterObjects(constructor, greeting) {
    constructor.prototype.greeting = greeting;
}

发表于 2022-02-16 09:47:26 回复(0)
function alterObjects(constructor, greeting) {
    constructor.prototype.greeting = greeting;
}

发表于 2022-01-07 11:40:12 回复(1)
function alterObjects(constructor, greeting) {
    // 给定的一个构造函数 constructor
    // 完成 这个 alterObjects 方法
    // constructor 的所有实例 ? 
    // 的 greeting 属性指向给定的 greeting 变量。
    // x.greeting属性 "指向给定的" ? 
    
    // constructor的原型的属性greeting值等于greeting
    constructor.prototype.greeting = greeting
}

发表于 2021-11-16 14:35:20 回复(0)
function alterObjects(constructor, greeting) {
   return Object.prototype.greeting = greeting;
}

发表于 2021-08-10 19:37:26 回复(0)