2018-02-27 在Radio选中后改变Radio的样式、JSON中的[] 与 {}、 javascript Object 冻结、GridControl根据条件设置每行中某单元格只读、C...

第一组:杨昊 在Radio选中后改变Radio的样式

比如这样的:

苹果

香蕉

葡萄

以上三个单选框,第一个是默认选中的,问题:如何让选中的radio给

添加样式?比如,我选中香蕉,香蕉那行的

就加个 class="cur"。就变成了这样:

香蕉

还有就是只要被选中的就给

加class="cur"。

那么解决方案是:JQuery!!!

是贼好用!!!

不多说看代码:

$(function(){
    $(".box input").change(function(){
        $(":checked").parent().addClass("cur").siblings().removeClass("cur");
    });
});

PS:siblings()用于在单选框属性为checked时,遍历整个单选Box,将之前选中的radio样式给移除掉。


第二组:叶佳意 JSON中的[] 与 {}

在 JSON 里 [] 是 Array(也就是数组) ,{} 是Ojbect(也就是对象)。[] Array 的key 是 int;{} 的key 是 string。
例如:var dot1=["a"]; 就是一个数组

var dot2={"a"} 就是一个对象

数组和对象转换非常简单, dot1把[] 替换为{} 就是对象, dot2把[]替换为{}就是素组。这在jquery的JSON处理中,非常常用。

当dot1为数组后,自然支持数组的常用方法,例如 dot1.push(), dot1.shift(),dot1.pop() 等方法。dot2为对象可以使用JS对象的各种方法。

var dot2={a:"a",b:"b",c:"c"}; 不管你看到dot2定义多么复杂,只要看到他是以{}开始和结尾就是理解为对象。var dot1=["a","b","c"]; 不管dot1多简单,只要是[]包含,就是数组。

当然,一个数组是可以包含多个对象的,所以 var dot1=[{a:"a"},{b:"b"}]; dot1就包含了2个对象。同样,dot1={[{a:"a"},{b:"b"}]} 就是一个对象,只是这个对象包含了一个数组。

var a= Array();
a[a.length] = '3';
a[a.length] = '4';
a[a.length] = '5';
a toJSON 后 ='["3", "4", "5"]'

var a = new Object();
a['test1'] = '3';
a['test2'] = '4';
a['test3'] = '5';
a toJSON 后 = '{"test1":"3", "test2":"4", "test3":"5"}'

第三组: javascript Object 冻结

Object 提供了三种方法对对象属性进行不同程度的冻结:

Object.preventExtensions(obj) : 无法对对象增加新属性

Object.seal(obj) : 无法对对象进行删除操作

Object.freeze(obj) : 冻结(浅层),除了上面两种外,对浅层的对象属性无法更改:

ar obj = {
    name: 'dora',
    sub: {
        qq: '443322222',
        result: {
            ok1: 'good',
            ok2: 'success'
        }
    }
}

Object.freeze(obj); // 冻结(浅层)
delete obj.name;
obj.type = 'js';
obj.name = 'dora1';
obj.sub.qq = 'what salei';
obj.sub.result.ok1 = 'really ok?';
console.log(obj);

输出:

{ name: 'dora',
  sub:
   { qq: 'what salei',
     result: { ok1: 'really ok?', ok2: 'success' } } }

我们发现 name 属性改变不了,但是 sub 属性的自属性 qq,result.ok1改变了。如何实现对象是深层冻结呢?

function deepFreeze(obj) {
    let getSubObj = (subObj) => {
        Object.freeze(subObj);
        for (let prop in subObj) {
            if (typeof subObj[prop] === 'object') {
                Object.freeze(subObj[prop]);
                getSubObj(subObj[prop]);
            } else {
                continue;
            }
        }
    }
    getSubObj(obj);
}

执行

deepFreeze(obj)

输出

{ name: 'dora',
  sub: { qq: '443322222', result: { ok1: 'good', ok2: 'success' } } }

对象属性完全冻结


第四组:李俊 GridControl根据条件设置每行中某单元格只读

要实现该功能,需要在GridControl下GridView的CustomRowCellEdit事件里处理。

具体代码如下:

    //表示GridControl中需要设置属性的控件
    RepositoryItem _disabledItem;
    private void _gridView_CustomRowCellEdit(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e)
    {
        if (e.Column.Name != "colunmName")//需要设置的列名
            return;
        if (_disabledItem == null)
        {
            _disabledItem = (RepositoryItem)e.RepositoryItem.Clone();
            _disabledItem.ReadOnly = true;
            _disabledItem.Enabled = false;
        }
        //判断条件
   var electric = _gridView.GetRow(e.RowHandle) as SelectElectricShow;
        if (electric == null)
            return;
        //满足条件,设置成只读
        if (electric.IsLimited)
            e.RepositoryItem = _disabledItem;
    }

效果如图所示:


2018-02-27 在Radio选中后改变Radio的样式、JSON中的[] 与 {}、 javascript Object 冻结、GridControl根据条件设置每行中某单元格只读、C..._第1张图片

第五组:周倩宇 C++ new、堆上和栈上分配对象

1. 说明

new:(1) 一种运算符(malloc是一种c中的库函数)
(2) 先分配对象(operator new)再构造对象,一般用于满足自定义的类类型

2. 原型

原型: void * operator new(size_t) throw(bad_alloc)
解释:该函数的返回值是一个void*指针,同时有可能会抛出bad_alloc的异常

3. 分析

分析new,且看vs2010中默认的全局operator new如下:

void *__CRTDECL operator new(size_t size)  _THROW1(_STD bad_alloc)  
{       // try to allocate size bytes  
       void *p;  
        while ((p = malloc(size)) == 0)  
                if (_callnewh(size) == 0)  //调用new_handler  
                {       // report no memory  
                static const std::bad_alloc nomem;  
                _RAISE(nomem);  //抛出异常  
                }  
        return (p);  
 }  

解释:
(1)函数框架与原型2一致
(2)3大步如下:

首先调用库函数malloc函数分配内存,若分配成功则直接返回;
其次,若分配失败则malloc返回0,此时调用new分配失败的处理函数new_handler(可以自己设置),然后反复malloc直到成功

最后,若调用new_handler后仍然无法分配足够的内存,则抛出bad_alloc异常
在operator new运行成功后,需要对对象进行构造,可以根据类类型以及给定的参数进行构造对象。

4. placement new可在已经分配的内存上进行构造对象

new (已分配的地址) type
new (已分配的地址) type(参数)

5. 仅在堆上才能创建的对象

利用栈变量在生命周期结束时由编译器自动释放的特点,即在生命周期结束时由编译器自动调用析构函数,
通过将析构函数定义为private或者protected,使得编译器无法调用,从而编译不通过。

(1)初始如下
使用方法:

heapObject* hp = new heapObject;
hp->release();

缺点:不易用,使用new创建,但需要函数来释放,且作为基类继承后无法访问private的析构函数

(2)修改如下

class heapObject  
{  
    public:  
        heapObject() {}  
        void release()  
        {  
            delete this;  
        }  
    private:  
        ~heapObject(){}  
};  

使用:

heapObject* hp = heapObject::create();
hp->release();
  1. 仅能在栈上分配的对象
class stackObject  
{  
    private:  
        void* operator new( size_t );  
        void operator delete( void* );  
        void* operator new[](size_t);  
        void operator delete[](void*);  
};  

你可能感兴趣的:(2018-02-27 在Radio选中后改变Radio的样式、JSON中的[] 与 {}、 javascript Object 冻结、GridControl根据条件设置每行中某单元格只读、C...)