元スレ+ JavaScript の質問用スレッド vol.108 +
JavaScript覧 / PC版 /みんなの評価 :
851 = :
これじゃあかんのか??
Object.defineProperty(Object, 'mixin', {
value: function (target, source) {
var keys = Object.getOwnPropertyNames(source)
for (var i = 0; i < keys.length; ++i) {
target[keys[i]] = source[keys[i]]
}
return target
}
})
852 = :
jqeuryの文法はjavascriptと違うようですが、どうやって文法拡張してるんですか?
それとも、うまいことメソッドを使って別の文法みたいに見せてるんですか
853 = :
>>851
Object.defineProperty(Object, 'mixin', {
value: function (target, source) {
var keys = Object.getOwnPropertyNames(source);
for (var i=0; i<keys.length; i++) {
Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));
}
return target;
}, enumerable: false
});
854 = :
後者で合ってる
855 = :
文法が違うと言われるとなんか違和感
856 = :
<div id="top">
<div>a<div>
<div>a<div>
<div>a<div>
<div>a<div>
<div>a<div>
</div>
こういうhtmlがあります
div#topの子要素をクリックしたときにインデックスが知りたいんですが
これはどうやって調べればいいのでしょうか?
857 = :
これでFAだな
Object.defineProperty(Object, 'mixin', {
value: function (target, source) {
var keys = Object.getOwnPropertyNames(source);
for (var i=0; i<keys.length; ++i) {
Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));
}
return target;
}
});
858 = :
>>854-855
最近javascript始めたので、まだ文法うろ覚えなんです
C++みたいな黒魔術使えるのかなーって思っただけです
あざーす
860 = :
>>856
こんな感じ
テストはしてない
var tar = event.currentTarget
var top = document.querySelector('div#top')
var divs = document.querySelectorAll('div#top>div')
while(tar && !tar.webkitMatchesSelector('div#top>div')) tar = tar.parentNode
if(!tar) return //場違いな要素
for(var i=0;i<divs.length)if(tar == divs[i]) break;
//---iが番数--
//以降処理
861 = :
writable:trueとconfigurable:trueは要らんの?
862 = :
>>860
なんでwebkit限定にするの?
863 = :
>>862
まだプレフィックス要るよということをwebkitに代表させただけ
他がどの程度対応してるかは知らん
864 = :
>>861
つうかプロトタイプ拡張じゃないんだからこれでいい
Object.mixin = function (target, source) {
var keys = Object.getOwnPropertyNames(source);
for (var i=0; i<keys.length; ++i) {
Object.defineProperty(target, keys[i], Object.getOwnPropertyDescriptor(source, keys[i]));
}
return target;
}
865 = :
せやな
868 = :
恐怖のstaticおじさんの話じゃないだろうな……
http://el.jibun.atmarkit.co.jp/pressenter/2010/11/1-828a.html
869 = :
本当にその画面にだけ必要な機能だけ分けてあとは共通ファイルにしたら
関数数個のファイルだらけにならないか?
870 = :
継承のためのメソッドを実装した継承可能クラスがあれば
継承を書くの簡単じゃね?と思ったのですが
そういうのありますか?
872 = :
コンストラクタから親クラスのコンストラクタを呼び出したり
メソッドをmixinしたりの処理がありますが・・
873 = :
javascriptでデストラクタのやり方をおしえてください
874 = :
ない
875 = :
>>872
言葉はいいからコードでどうしたいのか例示して
876 = :
どうかくのが良いのでしょうか
これのサンプルおねがいします
877 = :
>>876
一般的な話過ぎて特定のサンプルコードにするのは難しいな
878 = :
ExtendableClass.inherit(Hoge,hogesMethods);
Hoge.inherit(Moge,mogesMethods);
var moge = new Moge();
こんなイメージです
879 = :
一般的な話なのにコードにかけないのはよく理解してないからじゃないのか?
880 = :
>>873
1回だけ参照が切れてるか調べる方法ならある
881 = :
>>880
おしえてえください
882 = :
>>878
Hoge.__proto__ = ExtendableClass.prototype
Hoge.prototype = hogesMethods
Moge.__proto__ = Hoge.prototype
Moge.prototype = mogesMethods
883 = :
そうですか・・・
あごっちに直接聞けばいいんですけど・・・
884 = :
>>879
ある程度まとまった量のコードを書かないと>>760に沿うようなサンプルの形にならんから
手間的にちょっと厳しいって感じだ
885 = :
超簡単な話こういうこと
//NG
function Human(name, age) {
var year = (new Date).getFullYear
this.wareki = (year - age > 25) ? 'showa' : 'heisei'
}
//OK
function Human(name, age) {
var year = (new Date).getFullYear
this.wareki = getWareki(year - age)
}
886 = :
まちった
//OK
function Human(name, age) {
this.wareki = getWareki(age)
}
887 = :
//NG
function Human(name, age) {
var year = (new Date).getFullYear
this.wareki = (year - age < 1988) ? 'showa' : 'heisei'
}
888 = :
Classが静的な言語なら幾ら分離してもIDEで追えるからいいけど
JavaScriptでは必ずしもそうでじゃないよ
889 = :
890 = :
>>885-887が
>Class(Object)の構築を初期化内でやるのはやめましょう。
これに対するサンプルコードだとは思えんな
891 = :
ロジックの分離ということだろう
そしてこのケースだと単純すぎてそぐわないが
obj.init()
とか
obj.set~
みたいなスタイルが一番推奨ということだろう
892 = :
>>890
>どうしてもさけられない場合でもせめてロジックと分離しましょう
この部分です
大きな構造になってくると>>891みたいな事だと思います
893 = :
クラスつまりコンストラクターとプロトタイプの定義と、
それをインスタンス化して利用するコードをわけろっていうことなんじゃないの?
>>886-887はクラスをどう定義するかって話になるんでちょっとズレてるような
894 = :
ちゃんとクラスを作れという話だよ
動的にメソッドを追加するなってこと
895 = :
直前のツイート読む限りそういうことだな
896 = :
どんどんJavaScriptじゃなくなっていく気がするね
もう別の言語でいいじゃんってならないの
897 = :
普通にJavaScriptのプロトタイプベースのオブジェクト指向の話だよ
898 = :
JavaScriptの最大の利点はブラウザでそのまま動くことなんですから
各自が用途に適した作法で書けばいいでしょう
ある程度規模の大きいプログラムの場合は>>893-894みたいな作法が好ましいってだけですね
899 = :
そんなことJSに限らず当たり前だろ
900 = :
クラス継承って、結局こんな関数書いてやるのが一番簡単ですよね?
function extendsClass(Parent,Child) {
var keys,key,i,prototype;
prototype = Child.prototype;
Child.prototype = Object.create(Parent.prototype);
keys = Object.keys(prototype);
for ( i=keys.length; i--;){
key = keys[i];
Child.prototype[key] = prototype[key];
}
Child.prototype.constructor = Child;
}
類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.118 + (1002) - [97%] - 2014/8/29 22:30
- + JavaScript の質問用スレッド vol.105 + (1001) - [97%] - 2013/5/20 4:45
- + JavaScript の質問用スレッド vol.128 + (1001) - [97%] - 2016/2/26 6:45
- + JavaScript の質問用スレッド vol.107 + (1001) - [97%] - 2013/9/7 10:16
- + JavaScript の質問用スレッド vol.138 + (1004) - [97%] - 2019/4/20 23:45
- + JavaScript の質問用スレッド vol.106 + (1001) - [97%] - 2013/7/20 9:30
- + JavaScript の質問用スレッド vol.109 + (1001) - [97%] - 2013/10/7 13:16
- + JavaScript の質問用スレッド vol.104 + (1001) - [97%] - 2013/1/28 4:00
- + JavaScript の質問用スレッド vol.103 + (1001) - [97%] - 2012/11/9 15:30
- + JavaScript の質問用スレッド vol.102 + (1001) - [97%] - 2012/9/11 17:30
- + JavaScript の質問用スレッド vol.101 + (1001) - [97%] - 2012/7/16 14:15
- + JavaScript の質問用スレッド vol.100 + (1001) - [97%] - 2012/6/13 22:46
- + JavaScript の質問用スレッド vol.120 + (1002) - [95%] - 2014/11/8 1:15
- + JavaScript の質問用スレッド vol.125 + (1001) - [95%] - 2015/10/7 17:45
- + JavaScript の質問用スレッド vol.124 + (1001) - [95%] - 2015/7/16 1:30
- + JavaScript の質問用スレッド vol.123 + (1002) - [95%] - 2015/4/27 23:30
- + JavaScript の質問用スレッド vol.123 + (966) - [95%] - 2020/10/20 2:30
トップメニューへ / →のくす牧場書庫について